diff --git a/CHANGELOG.md b/CHANGELOG.md index 8555e6bcc2..263046da4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,39 @@ # Changelog +## [0.86.25](https://github.com/kurtosis-tech/kurtosis/compare/0.86.24...0.86.25) (2024-02-16) + + +### Features + +* emui builder python nodes ([#2170](https://github.com/kurtosis-tech/kurtosis/issues/2170)) ([26ad571](https://github.com/kurtosis-tech/kurtosis/commit/26ad5716548edec84e5276ddfe972203c7d5838d)) +* kurtosis run `--non-blocking-tasks` ([#2153](https://github.com/kurtosis-tech/kurtosis/issues/2153)) ([6c70247](https://github.com/kurtosis-tech/kurtosis/commit/6c70247531eb0343434101fe54cf6ef028ded873)) + + +### Bug Fixes + +* allow for single quotes in run_python ([#2172](https://github.com/kurtosis-tech/kurtosis/issues/2172)) ([4048368](https://github.com/kurtosis-tech/kurtosis/commit/4048368f9fe38d28f1e912a108b79cdbac17a1b7)), closes [#2171](https://github.com/kurtosis-tech/kurtosis/issues/2171) + +## [0.86.24](https://github.com/kurtosis-tech/kurtosis/compare/0.86.23...0.86.24) (2024-02-15) + + +### Features + +* added a `description` field to instructions ([#2147](https://github.com/kurtosis-tech/kurtosis/issues/2147)) ([9085cfd](https://github.com/kurtosis-tech/kurtosis/commit/9085cfd7d1ad51b65e2087e124cc24cb487364b8)) + +## [0.86.23](https://github.com/kurtosis-tech/kurtosis/compare/0.86.22...0.86.23) (2024-02-15) + + +### Bug Fixes + +* replace nix installer ([#2163](https://github.com/kurtosis-tech/kurtosis/issues/2163)) ([8f68547](https://github.com/kurtosis-tech/kurtosis/commit/8f68547ed7ec0959dabd5c2fa2ddec1a78f43847)) + +## [0.86.22](https://github.com/kurtosis-tech/kurtosis/compare/0.86.21...0.86.22) (2024-02-15) + + +### Bug Fixes + +* allow building images in arm64 ([#2161](https://github.com/kurtosis-tech/kurtosis/issues/2161)) ([acd884f](https://github.com/kurtosis-tech/kurtosis/commit/acd884fb1a8292b450e66c8f48156f4cef52a082)) + ## [0.86.21](https://github.com/kurtosis-tech/kurtosis/compare/0.86.20...0.86.21) (2024-02-15) diff --git a/LICENSE.md b/LICENSE.md index 22c5df34cb..30f893d163 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -3,7 +3,7 @@ Business Source License 1.1 Parameters Licensor: Kurtosis Technologies, Inc. -Licensed Work: Kurtosis 0.86.21 +Licensed Work: Kurtosis 0.86.25 The Licensed Work is (c) 2024 Kurtosis Technologies, Inc. Additional Use Grant: You may make use of the Licensed Work, provided that you may not use the Licensed Work for an Environment Orchestration Service. @@ -12,7 +12,7 @@ you may not use the Licensed Work for an Environment Orchestration Service. allows third parties (other than your employees and contractors) to create distributed system environments. -Change Date: 2028-02-15 +Change Date: 2028-02-16 Change License: Apache 2.0 (Apache License, Version 2.0) diff --git a/api/golang/core/kurtosis_core_rpc_api_bindings/api_container_service.pb.go b/api/golang/core/kurtosis_core_rpc_api_bindings/api_container_service.pb.go index a8d4f05aea..6407ae89b5 100644 --- a/api/golang/core/kurtosis_core_rpc_api_bindings/api_container_service.pb.go +++ b/api/golang/core/kurtosis_core_rpc_api_bindings/api_container_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.4 +// protoc-gen-go v1.32.0 +// protoc v4.25.2 // source: api_container_service.proto package kurtosis_core_rpc_api_bindings @@ -655,6 +655,8 @@ type RunStarlarkScriptArgs struct { CloudUserId *string `protobuf:"bytes,8,opt,name=cloud_user_id,json=cloudUserId,proto3,oneof" json:"cloud_user_id,omitempty"` // Defaults to empty ImageDownloadMode *ImageDownloadMode `protobuf:"varint,9,opt,name=image_download_mode,json=imageDownloadMode,proto3,enum=api_container_api.ImageDownloadMode,oneof" json:"image_download_mode,omitempty"` + // Defaults to false + NonBlockingMode *bool `protobuf:"varint,10,opt,name=non_blocking_mode,json=nonBlockingMode,proto3,oneof" json:"non_blocking_mode,omitempty"` } func (x *RunStarlarkScriptArgs) Reset() { @@ -752,6 +754,13 @@ func (x *RunStarlarkScriptArgs) GetImageDownloadMode() ImageDownloadMode { return ImageDownloadMode_always } +func (x *RunStarlarkScriptArgs) GetNonBlockingMode() bool { + if x != nil && x.NonBlockingMode != nil { + return *x.NonBlockingMode + } + return false +} + type RunStarlarkPackageArgs struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -792,6 +801,8 @@ type RunStarlarkPackageArgs struct { CloudUserId *string `protobuf:"bytes,13,opt,name=cloud_user_id,json=cloudUserId,proto3,oneof" json:"cloud_user_id,omitempty"` // Defaults to empty ImageDownloadMode *ImageDownloadMode `protobuf:"varint,14,opt,name=image_download_mode,json=imageDownloadMode,proto3,enum=api_container_api.ImageDownloadMode,oneof" json:"image_download_mode,omitempty"` + // Defaults to false + NonBlockingMode *bool `protobuf:"varint,15,opt,name=non_blocking_mode,json=nonBlockingMode,proto3,oneof" json:"non_blocking_mode,omitempty"` } func (x *RunStarlarkPackageArgs) Reset() { @@ -924,6 +935,13 @@ func (x *RunStarlarkPackageArgs) GetImageDownloadMode() ImageDownloadMode { return ImageDownloadMode_always } +func (x *RunStarlarkPackageArgs) GetNonBlockingMode() bool { + if x != nil && x.NonBlockingMode != nil { + return *x.NonBlockingMode + } + return false +} + type isRunStarlarkPackageArgs_StarlarkPackageContent interface { isRunStarlarkPackageArgs_StarlarkPackageContent() } @@ -1200,6 +1218,7 @@ type StarlarkInstruction struct { Arguments []*StarlarkInstructionArg `protobuf:"bytes,3,rep,name=arguments,proto3" json:"arguments,omitempty"` ExecutableInstruction string `protobuf:"bytes,4,opt,name=executable_instruction,json=executableInstruction,proto3" json:"executable_instruction,omitempty"` IsSkipped bool `protobuf:"varint,5,opt,name=is_skipped,json=isSkipped,proto3" json:"is_skipped,omitempty"` + Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` } func (x *StarlarkInstruction) Reset() { @@ -1269,6 +1288,13 @@ func (x *StarlarkInstruction) GetIsSkipped() bool { return false } +func (x *StarlarkInstruction) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + type StarlarkInstructionResult struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3354,7 +3380,7 @@ var file_api_container_service_proto_rawDesc = []byte{ 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x89, 0x05, 0x0a, 0x15, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd0, 0x05, 0x0a, 0x15, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x41, 0x72, 0x67, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x65, 0x72, 0x69, @@ -3386,131 +3412,142 @@ var file_api_container_service_proto_rawDesc = []byte{ 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x48, 0x06, 0x52, 0x11, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x73, 0x65, 0x72, + 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x11, 0x6e, 0x6f, 0x6e, 0x5f, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x08, 0x48, 0x07, 0x52, 0x0f, 0x6e, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x69, + 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x73, 0x65, + 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, + 0x0a, 0x0a, 0x08, 0x5f, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, + 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x69, 0x73, 0x6d, 0x42, 0x15, 0x0a, 0x13, 0x5f, + 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x6f, + 0x64, 0x65, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x6e, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0xad, 0x07, 0x0a, 0x16, 0x52, 0x75, 0x6e, + 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x41, + 0x72, 0x67, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x49, 0x64, 0x12, 0x16, 0x0a, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0c, 0x48, 0x00, 0x52, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x06, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x11, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, + 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x01, 0x52, 0x10, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1c, 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, + 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x48, 0x02, 0x52, 0x06, 0x64, 0x72, 0x79, 0x52, 0x75, + 0x6e, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, + 0x69, 0x73, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x48, 0x03, 0x52, 0x0b, 0x70, 0x61, 0x72, + 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x69, 0x73, 0x6d, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x63, + 0x6c, 0x6f, 0x6e, 0x65, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x08, 0x48, 0x04, 0x52, 0x0c, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x3f, 0x0a, 0x1a, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, + 0x69, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x05, 0x52, 0x16, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x68, 0x54, 0x6f, 0x4d, 0x61, 0x69, 0x6e, 0x46, + 0x69, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x31, 0x0a, 0x12, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x06, 0x52, 0x10, 0x6d, 0x61, 0x69, 0x6e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x5b, 0x0a, 0x15, 0x65, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x4b, 0x75, 0x72, + 0x74, 0x6f, 0x73, 0x69, 0x73, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, + 0x52, 0x14, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x11, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x07, 0x52, 0x0f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0d, 0x63, 0x6c, 0x6f, 0x75, 0x64, + 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x48, 0x08, + 0x52, 0x0b, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x88, 0x01, 0x01, + 0x12, 0x59, 0x0a, 0x13, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, + 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, + 0x69, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d, + 0x6f, 0x64, 0x65, 0x48, 0x09, 0x52, 0x11, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x11, 0x6e, + 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x48, 0x0a, 0x52, 0x0f, 0x6e, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x42, 0x1a, 0x0a, 0x18, + 0x73, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x70, - 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x69, 0x73, 0x6d, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x6d, - 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x6d, - 0x61, 0x67, 0x65, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x6f, 0x64, - 0x65, 0x22, 0xe6, 0x06, 0x0a, 0x16, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, - 0x6b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x41, 0x72, 0x67, 0x73, 0x12, 0x1d, 0x0a, 0x0a, - 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x05, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x05, 0x6c, 0x6f, - 0x63, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x30, 0x0a, - 0x11, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x10, 0x73, 0x65, 0x72, 0x69, - 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x88, 0x01, 0x01, 0x12, - 0x1c, 0x0a, 0x07, 0x64, 0x72, 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, - 0x48, 0x02, 0x52, 0x06, 0x64, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, - 0x0b, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x69, 0x73, 0x6d, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x05, 0x48, 0x03, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x69, 0x73, - 0x6d, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x5f, 0x70, 0x61, - 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x48, 0x04, 0x52, 0x0c, 0x63, - 0x6c, 0x6f, 0x6e, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x3f, - 0x0a, 0x1a, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, - 0x74, 0x6f, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x05, 0x52, 0x16, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, - 0x74, 0x68, 0x54, 0x6f, 0x4d, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, - 0x31, 0x0a, 0x12, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, 0x06, 0x52, 0x10, 0x6d, - 0x61, 0x69, 0x6e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x88, - 0x01, 0x01, 0x12, 0x5b, 0x0a, 0x15, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, - 0x0e, 0x32, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x4b, 0x75, 0x72, 0x74, 0x6f, 0x73, 0x69, 0x73, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x14, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, - 0x2f, 0x0a, 0x11, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x48, 0x07, 0x52, 0x0f, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x88, 0x01, 0x01, - 0x12, 0x27, 0x0a, 0x0d, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x48, 0x08, 0x52, 0x0b, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x59, 0x0a, 0x13, 0x69, 0x6d, 0x61, - 0x67, 0x65, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x65, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x48, 0x09, 0x52, 0x11, - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x64, - 0x65, 0x88, 0x01, 0x01, 0x42, 0x1a, 0x0a, 0x18, 0x73, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, - 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x64, 0x72, 0x79, 0x5f, 0x72, - 0x75, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x69, - 0x73, 0x6d, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x5f, 0x70, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x42, 0x1d, 0x0a, 0x1b, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, - 0x69, 0x6c, 0x65, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x63, - 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x6f, 0x77, - 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0xb6, 0x04, 0x0a, 0x17, 0x53, - 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x4a, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, - 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4d, 0x0a, 0x0d, - 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, - 0x52, 0x75, 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x70, - 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x5d, 0x0a, 0x12, 0x69, - 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, - 0x6c, 0x61, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x11, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x5b, 0x0a, 0x12, 0x72, 0x75, - 0x6e, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x6c, - 0x61, 0x72, 0x6b, 0x52, 0x75, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x72, 0x75, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, - 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69, - 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, - 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x07, - 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x35, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x69, 0x73, 0x6d, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x63, + 0x6c, 0x6f, 0x6e, 0x65, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x42, 0x1d, 0x0a, 0x1b, + 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x74, + 0x6f, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x42, 0x15, 0x0a, 0x13, 0x5f, + 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6d, 0x6f, + 0x64, 0x65, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x6e, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0xb6, 0x04, 0x0a, 0x17, 0x53, 0x74, 0x61, + 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x4c, 0x69, 0x6e, 0x65, 0x12, 0x4a, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x5f, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, + 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x38, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x4d, 0x0a, 0x0d, 0x70, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x52, 0x75, + 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x5d, 0x0a, 0x12, 0x69, 0x6e, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, - 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x42, 0x13, - 0x0a, 0x11, 0x72, 0x75, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x6c, - 0x69, 0x6e, 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x66, 0x6f, 0x5f, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x66, 0x6f, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x3a, 0x0a, 0x0f, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, - 0x72, 0x6b, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x61, 0x72, - 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0e, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0xab, 0x02, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x49, - 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x61, - 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, - 0x2e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x47, 0x0a, 0x09, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x11, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x5b, 0x0a, 0x12, 0x72, 0x75, 0x6e, 0x5f, + 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, - 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x72, 0x67, 0x52, - 0x09, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x35, 0x0a, 0x16, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, + 0x6b, 0x52, 0x75, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x10, 0x72, 0x75, 0x6e, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x6c, + 0x61, 0x72, 0x6b, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x07, 0x77, 0x61, + 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x35, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, + 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x42, 0x13, 0x0a, 0x11, + 0x72, 0x75, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x6c, 0x69, 0x6e, + 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x66, 0x6f, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x66, 0x6f, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x3a, 0x0a, 0x0f, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, + 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x61, 0x72, 0x6e, 0x69, + 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0xcd, 0x02, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x49, 0x6e, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x61, 0x70, 0x69, + 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x47, 0x0a, 0x09, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x49, + 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x72, 0x67, 0x52, 0x09, 0x61, + 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x35, 0x0a, 0x16, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x6b, 0x69, 0x70, 0x70, 0x65, 0x64, 0x12, 0x20, + 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5f, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, 0x6c, 0x61, 0x72, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x42, 0x0a, 0x1d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, diff --git a/api/golang/core/kurtosis_core_rpc_api_bindings/api_container_service_grpc.pb.go b/api/golang/core/kurtosis_core_rpc_api_bindings/api_container_service_grpc.pb.go index 780145bdc4..ca2ca2f836 100644 --- a/api/golang/core/kurtosis_core_rpc_api_bindings/api_container_service_grpc.pb.go +++ b/api/golang/core/kurtosis_core_rpc_api_bindings/api_container_service_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.24.4 +// - protoc v4.25.2 // source: api_container_service.proto package kurtosis_core_rpc_api_bindings diff --git a/api/golang/core/lib/binding_constructors/binding_constructors.go b/api/golang/core/lib/binding_constructors/binding_constructors.go index 1a99cdae90..ecc7c344e3 100644 --- a/api/golang/core/lib/binding_constructors/binding_constructors.go +++ b/api/golang/core/lib/binding_constructors/binding_constructors.go @@ -42,6 +42,7 @@ func NewRunStarlarkScriptArgs( cloudInstanceId string, cloudUserId string, imageDownloadMode kurtosis_core_rpc_api_bindings.ImageDownloadMode, + nonBlockingMode bool, ) *kurtosis_core_rpc_api_bindings.RunStarlarkScriptArgs { cloudInstanceIdCopy := new(string) *cloudInstanceIdCopy = cloudInstanceId @@ -61,6 +62,7 @@ func NewRunStarlarkScriptArgs( CloudInstanceId: cloudInstanceIdCopy, CloudUserId: cloudUserIdCopy, ImageDownloadMode: imageDownloadModeCopy, + NonBlockingMode: &nonBlockingMode, } } @@ -75,6 +77,7 @@ func NewRunStarlarkPackageArgs( cloudInstanceId string, cloudUserId string, imageDownloadMode kurtosis_core_rpc_api_bindings.ImageDownloadMode, + nonBlockingMode bool, ) *kurtosis_core_rpc_api_bindings.RunStarlarkPackageArgs { parallelismCopy := new(int32) *parallelismCopy = parallelism @@ -98,6 +101,7 @@ func NewRunStarlarkPackageArgs( CloudInstanceId: cloudInstanceIdCopy, CloudUserId: cloudUserIdCopy, ImageDownloadMode: imageDownloadModeCopy, + NonBlockingMode: &nonBlockingMode, } } @@ -112,6 +116,7 @@ func NewRunStarlarkRemotePackageArgs( cloudInstanceId string, cloudUserId string, imageDownloadMode kurtosis_core_rpc_api_bindings.ImageDownloadMode, + nonBlockingMode bool, ) *kurtosis_core_rpc_api_bindings.RunStarlarkPackageArgs { parallelismCopy := new(int32) *parallelismCopy = parallelism @@ -135,6 +140,7 @@ func NewRunStarlarkRemotePackageArgs( CloudInstanceId: cloudInstanceIdCopy, CloudUserId: cloudUserIdCopy, ImageDownloadMode: imageDownloadModeCopy, + NonBlockingMode: &nonBlockingMode, } } @@ -263,13 +269,14 @@ func NewStarlarkRunResponseLineFromRunSuccessEvent(serializedOutputObject string } } -func NewStarlarkInstruction(position *kurtosis_core_rpc_api_bindings.StarlarkInstructionPosition, name string, executableInstruction string, arguments []*kurtosis_core_rpc_api_bindings.StarlarkInstructionArg, isSkipped bool) *kurtosis_core_rpc_api_bindings.StarlarkInstruction { +func NewStarlarkInstruction(position *kurtosis_core_rpc_api_bindings.StarlarkInstructionPosition, name string, executableInstruction string, arguments []*kurtosis_core_rpc_api_bindings.StarlarkInstructionArg, isSkipped bool, description string) *kurtosis_core_rpc_api_bindings.StarlarkInstruction { return &kurtosis_core_rpc_api_bindings.StarlarkInstruction{ InstructionName: name, Position: position, ExecutableInstruction: executableInstruction, Arguments: arguments, IsSkipped: isSkipped, + Description: description, } } diff --git a/api/golang/core/lib/enclaves/enclave_context.go b/api/golang/core/lib/enclaves/enclave_context.go index 7fbffc2d41..91487cbb4a 100644 --- a/api/golang/core/lib/enclaves/enclave_context.go +++ b/api/golang/core/lib/enclaves/enclave_context.go @@ -110,7 +110,17 @@ func (enclaveCtx *EnclaveContext) RunStarlarkScript( return nil, nil, stacktrace.Propagate(err, "An error occurred when parsing YAML args for script '%v'", oldSerializedParams) } ctxWithCancel, cancelCtxFunc := context.WithCancel(ctx) - executeStartosisScriptArgs := binding_constructors.NewRunStarlarkScriptArgs(runConfig.MainFunctionName, serializedScript, serializedParams, runConfig.DryRun, runConfig.Parallelism, runConfig.ExperimentalFeatureFlags, runConfig.CloudInstanceId, runConfig.CloudUserId, runConfig.ImageDownload) + executeStartosisScriptArgs := binding_constructors.NewRunStarlarkScriptArgs( + runConfig.MainFunctionName, + serializedScript, + serializedParams, + runConfig.DryRun, + runConfig.Parallelism, + runConfig.ExperimentalFeatureFlags, + runConfig.CloudInstanceId, + runConfig.CloudUserId, + runConfig.ImageDownload, + runConfig.NonBlockingMode) starlarkResponseLineChan := make(chan *kurtosis_core_rpc_api_bindings.StarlarkRunResponseLine) stream, err := enclaveCtx.client.RunStarlarkScript(ctxWithCancel, executeStartosisScriptArgs) @@ -172,7 +182,8 @@ func (enclaveCtx *EnclaveContext) RunStarlarkPackage( runConfig.ExperimentalFeatureFlags, runConfig.CloudInstanceId, runConfig.CloudUserId, - runConfig.ImageDownload) + runConfig.ImageDownload, + runConfig.NonBlockingMode) if err != nil { return nil, nil, stacktrace.Propagate(err, "Error preparing package '%s' for execution", packageRootPath) } @@ -297,7 +308,7 @@ func (enclaveCtx *EnclaveContext) RunStarlarkRemotePackage( }() starlarkResponseLineChan := make(chan *kurtosis_core_rpc_api_bindings.StarlarkRunResponseLine) - executeStartosisScriptArgs := binding_constructors.NewRunStarlarkRemotePackageArgs(packageId, runConfig.RelativePathToMainFile, runConfig.MainFunctionName, serializedParams, runConfig.DryRun, runConfig.Parallelism, runConfig.ExperimentalFeatureFlags, runConfig.CloudInstanceId, runConfig.CloudUserId, runConfig.ImageDownload) + executeStartosisScriptArgs := binding_constructors.NewRunStarlarkRemotePackageArgs(packageId, runConfig.RelativePathToMainFile, runConfig.MainFunctionName, serializedParams, runConfig.DryRun, runConfig.Parallelism, runConfig.ExperimentalFeatureFlags, runConfig.CloudInstanceId, runConfig.CloudUserId, runConfig.ImageDownload, runConfig.NonBlockingMode) stream, err := enclaveCtx.client.RunStarlarkPackage(ctxWithCancel, executeStartosisScriptArgs) if err != nil { @@ -605,9 +616,21 @@ func (enclaveCtx *EnclaveContext) assembleRunStartosisPackageArg( cloudInstanceId string, cloudUserId string, imageDownloadMode kurtosis_core_rpc_api_bindings.ImageDownloadMode, + nonBlockingMode bool, ) (*kurtosis_core_rpc_api_bindings.RunStarlarkPackageArgs, error) { - return binding_constructors.NewRunStarlarkPackageArgs(packageName, relativePathToMainFile, mainFunctionName, serializedParams, dryRun, parallelism, experimentalFeatures, cloudInstanceId, cloudUserId, imageDownloadMode), nil + return binding_constructors.NewRunStarlarkPackageArgs( + packageName, + relativePathToMainFile, + mainFunctionName, + serializedParams, + dryRun, + parallelism, + experimentalFeatures, + cloudInstanceId, + cloudUserId, + imageDownloadMode, + nonBlockingMode), nil } func (enclaveCtx *EnclaveContext) uploadStarlarkPackage(packageId string, packageRootPath string) error { diff --git a/api/golang/core/lib/starlark_run_config/starlark_run_config.go b/api/golang/core/lib/starlark_run_config/starlark_run_config.go index ad1002473f..be8303b9c6 100644 --- a/api/golang/core/lib/starlark_run_config/starlark_run_config.go +++ b/api/golang/core/lib/starlark_run_config/starlark_run_config.go @@ -11,6 +11,7 @@ const ( defaultCloudInstanceId = "" defaultCloudUserId = "" defaultImageDownload = kurtosis_core_rpc_api_bindings.ImageDownloadMode_missing + defaultNonBlockingMode = false ) var defaultExperimentalFeatureFlags = []kurtosis_core_rpc_api_bindings.KurtosisFeatureFlag(nil) @@ -25,6 +26,7 @@ type StarlarkRunConfig struct { CloudInstanceId string CloudUserId string ImageDownload kurtosis_core_rpc_api_bindings.ImageDownloadMode + NonBlockingMode bool } type starlarkRunConfigOption func(*StarlarkRunConfig) @@ -40,6 +42,7 @@ func NewRunStarlarkConfig(opts ...starlarkRunConfigOption) *StarlarkRunConfig { CloudInstanceId: defaultCloudInstanceId, CloudUserId: defaultCloudUserId, ImageDownload: defaultImageDownload, + NonBlockingMode: defaultNonBlockingMode, } for _, opt := range opts { @@ -104,3 +107,9 @@ func WithImageDownloadMode(imageDownloadMode kurtosis_core_rpc_api_bindings.Imag config.ImageDownload = imageDownloadMode } } + +func WithNonBlockingMode(nonBlockingMode bool) starlarkRunConfigOption { + return func(config *StarlarkRunConfig) { + config.NonBlockingMode = nonBlockingMode + } +} diff --git a/api/golang/engine/kurtosis_engine_rpc_api_bindings/engine_service.pb.go b/api/golang/engine/kurtosis_engine_rpc_api_bindings/engine_service.pb.go index e15990f41e..7420f88c38 100644 --- a/api/golang/engine/kurtosis_engine_rpc_api_bindings/engine_service.pb.go +++ b/api/golang/engine/kurtosis_engine_rpc_api_bindings/engine_service.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v4.24.4 +// protoc-gen-go v1.32.0 +// protoc v4.25.2 // source: engine_service.proto package kurtosis_engine_rpc_api_bindings diff --git a/api/golang/engine/kurtosis_engine_rpc_api_bindings/engine_service_grpc.pb.go b/api/golang/engine/kurtosis_engine_rpc_api_bindings/engine_service_grpc.pb.go index 030fc811cf..d3a95bd5b6 100644 --- a/api/golang/engine/kurtosis_engine_rpc_api_bindings/engine_service_grpc.pb.go +++ b/api/golang/engine/kurtosis_engine_rpc_api_bindings/engine_service_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.24.4 +// - protoc v4.25.2 // source: engine_service.proto package kurtosis_engine_rpc_api_bindings diff --git a/api/golang/http_rest/api_types/api_types.gen.go b/api/golang/http_rest/api_types/api_types.gen.go index 877ee1b211..cdc4bfadf9 100644 --- a/api/golang/http_rest/api_types/api_types.gen.go +++ b/api/golang/http_rest/api_types/api_types.gen.go @@ -334,6 +334,9 @@ type RunStarlarkPackage struct { // MainFunctionName The name of the main function, the default value is "run" MainFunctionName *string `json:"main_function_name,omitempty"` + // NonBlockingMode Defaults to false + NonBlockingMode *bool `json:"non_blocking_mode,omitempty"` + // Parallelism Defaults to 4 Parallelism *int32 `json:"parallelism,omitempty"` @@ -363,6 +366,9 @@ type RunStarlarkScript struct { // MainFunctionName The name of the main function, the default value is "run" MainFunctionName *string `json:"main_function_name,omitempty"` + // NonBlockingMode Defaults to false + NonBlockingMode *bool `json:"non_blocking_mode,omitempty"` + // Parallelism Defaults to 4 Parallelism *int32 `json:"parallelism,omitempty"` diff --git a/api/golang/http_rest/server/core_rest_api/api_container_server.gen.go b/api/golang/http_rest/server/core_rest_api/api_container_server.gen.go index 8820011284..403877d2da 100644 --- a/api/golang/http_rest/server/core_rest_api/api_container_server.gen.go +++ b/api/golang/http_rest/server/core_rest_api/api_container_server.gen.go @@ -1546,83 +1546,83 @@ func (sh *strictHandler) PostEnclavesEnclaveIdentifierStarlarkScripts(ctx echo.C // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", - "fwAAAP//wAoBgRFnAAA=", + "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", + "CMTalCakb2r/p0Xq8/3/BwAA//8Jr2xbo2cAAA==", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/golang/kurtosis_version/kurtosis_version.go b/api/golang/kurtosis_version/kurtosis_version.go index 39846c1700..e34f7afd25 100644 --- a/api/golang/kurtosis_version/kurtosis_version.go +++ b/api/golang/kurtosis_version/kurtosis_version.go @@ -9,6 +9,6 @@ const ( // !!!!!!!!!!! DO NOT UPDATE! WILL BE MANUALLY UPDATED DURING THE RELEASE PROCESS !!!!!!!!!!!!!!!!!!!!!! // This is necessary so that Kurt Core consumers will know if they're compatible with the currently-running // API container - KurtosisVersion = "0.86.21" + KurtosisVersion = "0.86.25" // !!!!!!!!!!! DO NOT UPDATE! WILL BE MANUALLY UPDATED DURING THE RELEASE PROCESS !!!!!!!!!!!!!!!!!!!!!! ) diff --git a/api/openapi/specs/kurtosis_api.yaml b/api/openapi/specs/kurtosis_api.yaml index 150cc927bd..b271a458bf 100644 --- a/api/openapi/specs/kurtosis_api.yaml +++ b/api/openapi/specs/kurtosis_api.yaml @@ -1125,6 +1125,9 @@ components: description: Defaults to empty image_download_mode: $ref: "#/components/schemas/ImageDownloadMode" + non_blocking_mode: + type: boolean + description: Defaults to false required: - serialized_script @@ -1168,6 +1171,9 @@ components: description: Defaults to empty image_download_mode: $ref: "#/components/schemas/ImageDownloadMode" + non_blocking_mode: + type: boolean + description: Defaults to false KurtosisFeatureFlag: type: string diff --git a/api/protobuf/core/api_container_service.proto b/api/protobuf/core/api_container_service.proto index 170f323d97..01049313e3 100644 --- a/api/protobuf/core/api_container_service.proto +++ b/api/protobuf/core/api_container_service.proto @@ -170,6 +170,9 @@ message RunStarlarkScriptArgs { // Defaults to empty optional ImageDownloadMode image_download_mode = 9; + + // Defaults to false + optional bool non_blocking_mode = 10; } message RunStarlarkPackageArgs { @@ -217,6 +220,9 @@ message RunStarlarkPackageArgs { // Defaults to empty optional ImageDownloadMode image_download_mode = 14; + + // Defaults to false + optional bool non_blocking_mode = 15; } enum KurtosisFeatureFlag { @@ -256,6 +262,8 @@ message StarlarkInstruction { string executable_instruction = 4; bool is_skipped = 5; + + string description = 6; } message StarlarkInstructionResult { diff --git a/api/rust/Cargo.toml b/api/rust/Cargo.toml index 2bb54ac4f9..e6f058ecc6 100644 --- a/api/rust/Cargo.toml +++ b/api/rust/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "kurtosis-sdk" -version = "0.86.21" +version = "0.86.25" license = "BUSL-1.1" description = "Rust SDK for Kurtosis" edition = "2021" diff --git a/api/rust/src/api_container_api.rs b/api/rust/src/api_container_api.rs index 62b55c7679..494dfa631d 100644 --- a/api/rust/src/api_container_api.rs +++ b/api/rust/src/api_container_api.rs @@ -181,6 +181,9 @@ pub struct RunStarlarkScriptArgs { /// Defaults to empty #[prost(enumeration = "ImageDownloadMode", optional, tag = "9")] pub image_download_mode: ::core::option::Option, + /// Defaults to false + #[prost(bool, optional, tag = "10")] + pub non_blocking_mode: ::core::option::Option, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -224,6 +227,9 @@ pub struct RunStarlarkPackageArgs { /// Defaults to empty #[prost(enumeration = "ImageDownloadMode", optional, tag = "14")] pub image_download_mode: ::core::option::Option, + /// Defaults to false + #[prost(bool, optional, tag = "15")] + pub non_blocking_mode: ::core::option::Option, /// Deprecated: If the package is local, it should have been uploaded with UploadStarlarkPackage prior to calling /// RunStarlarkPackage. If the package is remote and must be cloned within the APIC, use the standalone boolean flag /// clone_package below @@ -308,6 +314,8 @@ pub struct StarlarkInstruction { pub executable_instruction: ::prost::alloc::string::String, #[prost(bool, tag = "5")] pub is_skipped: bool, + #[prost(string, tag = "6")] + pub description: ::prost::alloc::string::String, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] diff --git a/api/typescript/package.json b/api/typescript/package.json index 48524be958..9beff6b9ce 100644 --- a/api/typescript/package.json +++ b/api/typescript/package.json @@ -1,7 +1,7 @@ { "name": "kurtosis-sdk", "//": "NOTE: DO NOT UPDATE THIS VERSION MANUALLY - IT WILL BE UPDATED DURING THE RELEASE PROCESS!", - "version": "0.86.21", + "version": "0.86.25", "main": "./build/index", "description": "This repo contains a Typescript client for communicating with the Kurtosis Engine server, which is responsible for creating, managing and destroying Kurtosis Enclaves.", "types": "./build/index", diff --git a/api/typescript/src/core/kurtosis_core_rpc_api_bindings/api_container_service_grpc_web_pb.d.ts b/api/typescript/src/core/kurtosis_core_rpc_api_bindings/api_container_service_grpc_web_pb.d.ts index c7a6afdd19..f5505b0e0e 100644 --- a/api/typescript/src/core/kurtosis_core_rpc_api_bindings/api_container_service_grpc_web_pb.d.ts +++ b/api/typescript/src/core/kurtosis_core_rpc_api_bindings/api_container_service_grpc_web_pb.d.ts @@ -1,7 +1,7 @@ import * as grpcWeb from 'grpc-web'; -import * as api_container_service_pb from './api_container_service_pb'; // proto import: "api_container_service.proto" -import * as google_protobuf_empty_pb from 'google-protobuf/google/protobuf/empty_pb'; // proto import: "google/protobuf/empty.proto" +import * as api_container_service_pb from './api_container_service_pb'; +import * as google_protobuf_empty_pb from 'google-protobuf/google/protobuf/empty_pb'; export class ApiContainerServiceClient { diff --git a/api/typescript/src/core/kurtosis_core_rpc_api_bindings/api_container_service_grpc_web_pb.js b/api/typescript/src/core/kurtosis_core_rpc_api_bindings/api_container_service_grpc_web_pb.js index 403dc2af4e..07732d2fbc 100644 --- a/api/typescript/src/core/kurtosis_core_rpc_api_bindings/api_container_service_grpc_web_pb.js +++ b/api/typescript/src/core/kurtosis_core_rpc_api_bindings/api_container_service_grpc_web_pb.js @@ -6,7 +6,7 @@ // Code generated by protoc-gen-grpc-web. DO NOT EDIT. // versions: -// protoc-gen-grpc-web v1.5.0 +// protoc-gen-grpc-web v1.4.2 // protoc v3.19.1 // source: api_container_service.proto diff --git a/api/typescript/src/core/kurtosis_core_rpc_api_bindings/api_container_service_pb.d.ts b/api/typescript/src/core/kurtosis_core_rpc_api_bindings/api_container_service_pb.d.ts index bff0c23421..13742313fe 100644 --- a/api/typescript/src/core/kurtosis_core_rpc_api_bindings/api_container_service_pb.d.ts +++ b/api/typescript/src/core/kurtosis_core_rpc_api_bindings/api_container_service_pb.d.ts @@ -1,6 +1,6 @@ import * as jspb from 'google-protobuf' -import * as google_protobuf_empty_pb from 'google-protobuf/google/protobuf/empty_pb'; // proto import: "google/protobuf/empty.proto" +import * as google_protobuf_empty_pb from 'google-protobuf/google/protobuf/empty_pb'; export class Port extends jspb.Message { @@ -179,6 +179,11 @@ export class RunStarlarkScriptArgs extends jspb.Message { hasImageDownloadMode(): boolean; clearImageDownloadMode(): RunStarlarkScriptArgs; + getNonBlockingMode(): boolean; + setNonBlockingMode(value: boolean): RunStarlarkScriptArgs; + hasNonBlockingMode(): boolean; + clearNonBlockingMode(): RunStarlarkScriptArgs; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): RunStarlarkScriptArgs.AsObject; static toObject(includeInstance: boolean, msg: RunStarlarkScriptArgs): RunStarlarkScriptArgs.AsObject; @@ -198,6 +203,7 @@ export namespace RunStarlarkScriptArgs { cloudInstanceId?: string, cloudUserId?: string, imageDownloadMode?: ImageDownloadMode, + nonBlockingMode?: boolean, } export enum SerializedParamsCase { @@ -234,6 +240,11 @@ export namespace RunStarlarkScriptArgs { _IMAGE_DOWNLOAD_MODE_NOT_SET = 0, IMAGE_DOWNLOAD_MODE = 9, } + + export enum NonBlockingModeCase { + _NON_BLOCKING_MODE_NOT_SET = 0, + NON_BLOCKING_MODE = 10, + } } export class RunStarlarkPackageArgs extends jspb.Message { @@ -298,6 +309,11 @@ export class RunStarlarkPackageArgs extends jspb.Message { hasImageDownloadMode(): boolean; clearImageDownloadMode(): RunStarlarkPackageArgs; + getNonBlockingMode(): boolean; + setNonBlockingMode(value: boolean): RunStarlarkPackageArgs; + hasNonBlockingMode(): boolean; + clearNonBlockingMode(): RunStarlarkPackageArgs; + getStarlarkPackageContentCase(): RunStarlarkPackageArgs.StarlarkPackageContentCase; serializeBinary(): Uint8Array; @@ -323,6 +339,7 @@ export namespace RunStarlarkPackageArgs { cloudInstanceId?: string, cloudUserId?: string, imageDownloadMode?: ImageDownloadMode, + nonBlockingMode?: boolean, } export enum StarlarkPackageContentCase { @@ -375,6 +392,11 @@ export namespace RunStarlarkPackageArgs { _IMAGE_DOWNLOAD_MODE_NOT_SET = 0, IMAGE_DOWNLOAD_MODE = 14, } + + export enum NonBlockingModeCase { + _NON_BLOCKING_MODE_NOT_SET = 0, + NON_BLOCKING_MODE = 15, + } } export class StarlarkRunResponseLine extends jspb.Message { @@ -502,6 +524,9 @@ export class StarlarkInstruction extends jspb.Message { getIsSkipped(): boolean; setIsSkipped(value: boolean): StarlarkInstruction; + getDescription(): string; + setDescription(value: string): StarlarkInstruction; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): StarlarkInstruction.AsObject; static toObject(includeInstance: boolean, msg: StarlarkInstruction): StarlarkInstruction.AsObject; @@ -517,6 +542,7 @@ export namespace StarlarkInstruction { argumentsList: Array, executableInstruction: string, isSkipped: boolean, + description: string, } } diff --git a/api/typescript/src/core/kurtosis_core_rpc_api_bindings/api_container_service_pb.js b/api/typescript/src/core/kurtosis_core_rpc_api_bindings/api_container_service_pb.js index 9663e05288..49174b1033 100644 --- a/api/typescript/src/core/kurtosis_core_rpc_api_bindings/api_container_service_pb.js +++ b/api/typescript/src/core/kurtosis_core_rpc_api_bindings/api_container_service_pb.js @@ -1937,7 +1937,8 @@ proto.api_container_api.RunStarlarkScriptArgs.toObject = function(includeInstanc experimentalFeaturesList: (f = jspb.Message.getRepeatedField(msg, 6)) == null ? undefined : f, cloudInstanceId: jspb.Message.getFieldWithDefault(msg, 7, ""), cloudUserId: jspb.Message.getFieldWithDefault(msg, 8, ""), - imageDownloadMode: jspb.Message.getFieldWithDefault(msg, 9, 0) + imageDownloadMode: jspb.Message.getFieldWithDefault(msg, 9, 0), + nonBlockingMode: jspb.Message.getBooleanFieldWithDefault(msg, 10, false) }; if (includeInstance) { @@ -2012,6 +2013,10 @@ proto.api_container_api.RunStarlarkScriptArgs.deserializeBinaryFromReader = func var value = /** @type {!proto.api_container_api.ImageDownloadMode} */ (reader.readEnum()); msg.setImageDownloadMode(value); break; + case 10: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setNonBlockingMode(value); + break; default: reader.skipField(); break; @@ -2104,6 +2109,13 @@ proto.api_container_api.RunStarlarkScriptArgs.serializeBinaryToWriter = function f ); } + f = /** @type {boolean} */ (jspb.Message.getField(message, 10)); + if (f != null) { + writer.writeBool( + 10, + f + ); + } }; @@ -2414,6 +2426,42 @@ proto.api_container_api.RunStarlarkScriptArgs.prototype.hasImageDownloadMode = f }; +/** + * optional bool non_blocking_mode = 10; + * @return {boolean} + */ +proto.api_container_api.RunStarlarkScriptArgs.prototype.getNonBlockingMode = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 10, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.api_container_api.RunStarlarkScriptArgs} returns this + */ +proto.api_container_api.RunStarlarkScriptArgs.prototype.setNonBlockingMode = function(value) { + return jspb.Message.setField(this, 10, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.api_container_api.RunStarlarkScriptArgs} returns this + */ +proto.api_container_api.RunStarlarkScriptArgs.prototype.clearNonBlockingMode = function() { + return jspb.Message.setField(this, 10, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.api_container_api.RunStarlarkScriptArgs.prototype.hasNonBlockingMode = function() { + return jspb.Message.getField(this, 10) != null; +}; + + /** * List of repeated fields within this message type. @@ -2491,7 +2539,8 @@ proto.api_container_api.RunStarlarkPackageArgs.toObject = function(includeInstan experimentalFeaturesList: (f = jspb.Message.getRepeatedField(msg, 11)) == null ? undefined : f, cloudInstanceId: jspb.Message.getFieldWithDefault(msg, 12, ""), cloudUserId: jspb.Message.getFieldWithDefault(msg, 13, ""), - imageDownloadMode: jspb.Message.getFieldWithDefault(msg, 14, 0) + imageDownloadMode: jspb.Message.getFieldWithDefault(msg, 14, 0), + nonBlockingMode: jspb.Message.getBooleanFieldWithDefault(msg, 15, false) }; if (includeInstance) { @@ -2582,6 +2631,10 @@ proto.api_container_api.RunStarlarkPackageArgs.deserializeBinaryFromReader = fun var value = /** @type {!proto.api_container_api.ImageDownloadMode} */ (reader.readEnum()); msg.setImageDownloadMode(value); break; + case 15: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setNonBlockingMode(value); + break; default: reader.skipField(); break; @@ -2702,6 +2755,13 @@ proto.api_container_api.RunStarlarkPackageArgs.serializeBinaryToWriter = functio f ); } + f = /** @type {boolean} */ (jspb.Message.getField(message, 15)); + if (f != null) { + writer.writeBool( + 15, + f + ); + } }; @@ -3180,6 +3240,42 @@ proto.api_container_api.RunStarlarkPackageArgs.prototype.hasImageDownloadMode = }; +/** + * optional bool non_blocking_mode = 15; + * @return {boolean} + */ +proto.api_container_api.RunStarlarkPackageArgs.prototype.getNonBlockingMode = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 15, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.api_container_api.RunStarlarkPackageArgs} returns this + */ +proto.api_container_api.RunStarlarkPackageArgs.prototype.setNonBlockingMode = function(value) { + return jspb.Message.setField(this, 15, value); +}; + + +/** + * Clears the field making it undefined. + * @return {!proto.api_container_api.RunStarlarkPackageArgs} returns this + */ +proto.api_container_api.RunStarlarkPackageArgs.prototype.clearNonBlockingMode = function() { + return jspb.Message.setField(this, 15, undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.api_container_api.RunStarlarkPackageArgs.prototype.hasNonBlockingMode = function() { + return jspb.Message.getField(this, 15) != null; +}; + + /** * Oneof group definitions for this message. Each group defines the field @@ -3972,7 +4068,8 @@ proto.api_container_api.StarlarkInstruction.toObject = function(includeInstance, argumentsList: jspb.Message.toObjectList(msg.getArgumentsList(), proto.api_container_api.StarlarkInstructionArg.toObject, includeInstance), executableInstruction: jspb.Message.getFieldWithDefault(msg, 4, ""), - isSkipped: jspb.Message.getBooleanFieldWithDefault(msg, 5, false) + isSkipped: jspb.Message.getBooleanFieldWithDefault(msg, 5, false), + description: jspb.Message.getFieldWithDefault(msg, 6, "") }; if (includeInstance) { @@ -4031,6 +4128,10 @@ proto.api_container_api.StarlarkInstruction.deserializeBinaryFromReader = functi var value = /** @type {boolean} */ (reader.readBool()); msg.setIsSkipped(value); break; + case 6: + var value = /** @type {string} */ (reader.readString()); + msg.setDescription(value); + break; default: reader.skipField(); break; @@ -4097,6 +4198,13 @@ proto.api_container_api.StarlarkInstruction.serializeBinaryToWriter = function(m f ); } + f = message.getDescription(); + if (f.length > 0) { + writer.writeString( + 6, + f + ); + } }; @@ -4229,6 +4337,24 @@ proto.api_container_api.StarlarkInstruction.prototype.setIsSkipped = function(va }; +/** + * optional string description = 6; + * @return {string} + */ +proto.api_container_api.StarlarkInstruction.prototype.getDescription = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, "")); +}; + + +/** + * @param {string} value + * @return {!proto.api_container_api.StarlarkInstruction} returns this + */ +proto.api_container_api.StarlarkInstruction.prototype.setDescription = function(value) { + return jspb.Message.setProto3StringField(this, 6, value); +}; + + diff --git a/api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/api_container_service_connect.d.ts b/api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/api_container_service_connect.d.ts index 6441630968..201f76f184 100644 --- a/api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/api_container_service_connect.d.ts +++ b/api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/api_container_service_connect.d.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-connect-es v0.13.2 with parameter "target=js+dts" +// @generated by protoc-gen-connect-es v1.3.0 with parameter "target=js+dts" // @generated from file api_container_service.proto (package api_container_api, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/api_container_service_connect.js b/api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/api_container_service_connect.js index fc66916490..627620d9d8 100644 --- a/api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/api_container_service_connect.js +++ b/api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/api_container_service_connect.js @@ -1,4 +1,4 @@ -// @generated by protoc-gen-connect-es v0.13.2 with parameter "target=js+dts" +// @generated by protoc-gen-connect-es v1.3.0 with parameter "target=js+dts" // @generated from file api_container_service.proto (package api_container_api, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/api_container_service_pb.d.ts b/api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/api_container_service_pb.d.ts index bbef713a48..b45831ded6 100644 --- a/api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/api_container_service_pb.d.ts +++ b/api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/api_container_service_pb.d.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.5.1 with parameter "target=js+dts" +// @generated by protoc-gen-es v1.3.1 with parameter "target=js+dts" // @generated from file api_container_service.proto (package api_container_api, syntax proto3) /* eslint-disable */ // @ts-nocheck @@ -368,6 +368,13 @@ export declare class RunStarlarkScriptArgs extends Message); static readonly runtime: typeof proto3; @@ -491,6 +498,13 @@ export declare class RunStarlarkPackageArgs extends Message); static readonly runtime: typeof proto3; @@ -653,6 +667,11 @@ export declare class StarlarkInstruction extends Message { */ isSkipped: boolean; + /** + * @generated from field: string description = 6; + */ + description: string; + constructor(data?: PartialMessage); static readonly runtime: typeof proto3; diff --git a/api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/api_container_service_pb.js b/api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/api_container_service_pb.js index eed1454734..dd244aa275 100644 --- a/api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/api_container_service_pb.js +++ b/api/typescript/src/core/kurtosis_core_rpc_api_bindings/connect/api_container_service_pb.js @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.5.1 with parameter "target=js+dts" +// @generated by protoc-gen-es v1.3.1 with parameter "target=js+dts" // @generated from file api_container_service.proto (package api_container_api, syntax proto3) /* eslint-disable */ // @ts-nocheck @@ -150,6 +150,7 @@ export const RunStarlarkScriptArgs = proto3.makeMessageType( { no: 7, name: "cloud_instance_id", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, { no: 8, name: "cloud_user_id", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, { no: 9, name: "image_download_mode", kind: "enum", T: proto3.getEnumType(ImageDownloadMode), opt: true }, + { no: 10, name: "non_blocking_mode", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, ], ); @@ -172,6 +173,7 @@ export const RunStarlarkPackageArgs = proto3.makeMessageType( { no: 12, name: "cloud_instance_id", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, { no: 13, name: "cloud_user_id", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, { no: 14, name: "image_download_mode", kind: "enum", T: proto3.getEnumType(ImageDownloadMode), opt: true }, + { no: 15, name: "non_blocking_mode", kind: "scalar", T: 8 /* ScalarType.BOOL */, opt: true }, ], ); @@ -226,6 +228,7 @@ export const StarlarkInstruction = proto3.makeMessageType( { no: 3, name: "arguments", kind: "message", T: StarlarkInstructionArg, repeated: true }, { no: 4, name: "executable_instruction", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 5, name: "is_skipped", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + { no: 6, name: "description", kind: "scalar", T: 9 /* ScalarType.STRING */ }, ], ); diff --git a/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/engine_service_connect.d.ts b/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/engine_service_connect.d.ts index 04235e5f69..49db57cc50 100644 --- a/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/engine_service_connect.d.ts +++ b/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/engine_service_connect.d.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-connect-es v0.13.2 with parameter "target=js+dts" +// @generated by protoc-gen-connect-es v1.3.0 with parameter "target=js+dts" // @generated from file engine_service.proto (package engine_api, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/engine_service_connect.js b/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/engine_service_connect.js index 7d45190ac5..e71a470bc4 100644 --- a/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/engine_service_connect.js +++ b/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/engine_service_connect.js @@ -1,4 +1,4 @@ -// @generated by protoc-gen-connect-es v0.13.2 with parameter "target=js+dts" +// @generated by protoc-gen-connect-es v1.3.0 with parameter "target=js+dts" // @generated from file engine_service.proto (package engine_api, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/engine_service_pb.d.ts b/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/engine_service_pb.d.ts index 269a10fde9..7eb383b09a 100644 --- a/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/engine_service_pb.d.ts +++ b/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/engine_service_pb.d.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.5.1 with parameter "target=js+dts" +// @generated by protoc-gen-es v1.3.1 with parameter "target=js+dts" // @generated from file engine_service.proto (package engine_api, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/engine_service_pb.js b/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/engine_service_pb.js index 24c994a6f4..c245f62078 100644 --- a/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/engine_service_pb.js +++ b/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/connect/engine_service_pb.js @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.5.1 with parameter "target=js+dts" +// @generated by protoc-gen-es v1.3.1 with parameter "target=js+dts" // @generated from file engine_service.proto (package engine_api, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/engine_service_grpc_web_pb.d.ts b/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/engine_service_grpc_web_pb.d.ts index 4a41f55da9..523a2a2d20 100644 --- a/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/engine_service_grpc_web_pb.d.ts +++ b/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/engine_service_grpc_web_pb.d.ts @@ -1,7 +1,7 @@ import * as grpcWeb from 'grpc-web'; -import * as engine_service_pb from './engine_service_pb'; // proto import: "engine_service.proto" -import * as google_protobuf_empty_pb from 'google-protobuf/google/protobuf/empty_pb'; // proto import: "google/protobuf/empty.proto" +import * as engine_service_pb from './engine_service_pb'; +import * as google_protobuf_empty_pb from 'google-protobuf/google/protobuf/empty_pb'; export class EngineServiceClient { diff --git a/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/engine_service_grpc_web_pb.js b/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/engine_service_grpc_web_pb.js index 6a8a4bad27..6a18e31707 100644 --- a/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/engine_service_grpc_web_pb.js +++ b/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/engine_service_grpc_web_pb.js @@ -6,7 +6,7 @@ // Code generated by protoc-gen-grpc-web. DO NOT EDIT. // versions: -// protoc-gen-grpc-web v1.5.0 +// protoc-gen-grpc-web v1.4.2 // protoc v3.19.1 // source: engine_service.proto diff --git a/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/engine_service_pb.d.ts b/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/engine_service_pb.d.ts index 06fc96768c..29cffdefcd 100644 --- a/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/engine_service_pb.d.ts +++ b/api/typescript/src/engine/kurtosis_engine_rpc_api_bindings/engine_service_pb.d.ts @@ -1,7 +1,7 @@ import * as jspb from 'google-protobuf' -import * as google_protobuf_empty_pb from 'google-protobuf/google/protobuf/empty_pb'; // proto import: "google/protobuf/empty.proto" -import * as google_protobuf_timestamp_pb from 'google-protobuf/google/protobuf/timestamp_pb'; // proto import: "google/protobuf/timestamp.proto" +import * as google_protobuf_empty_pb from 'google-protobuf/google/protobuf/empty_pb'; +import * as google_protobuf_timestamp_pb from 'google-protobuf/google/protobuf/timestamp_pb'; export class GetEngineInfoResponse extends jspb.Message { diff --git a/api/typescript/src/engine/rest_api_bindings/types.d.ts b/api/typescript/src/engine/rest_api_bindings/types.d.ts index 4764b775d6..1e390f00c9 100644 --- a/api/typescript/src/engine/rest_api_bindings/types.d.ts +++ b/api/typescript/src/engine/rest_api_bindings/types.d.ts @@ -1326,6 +1326,8 @@ export interface components { /** @description Defaults to empty */ cloud_user_id?: string; image_download_mode?: components["schemas"]["ImageDownloadMode"]; + /** @description Defaults to false */ + non_blocking_mode?: boolean; }; RunStarlarkPackage: { /** @description Parameters data for the Starlark package main function */ @@ -1354,6 +1356,8 @@ export interface components { /** @description Defaults to empty */ cloud_user_id?: string; image_download_mode?: components["schemas"]["ImageDownloadMode"]; + /** @description Defaults to false */ + non_blocking_mode?: boolean; }; /** * @description 0 - NO_INSTRUCTIONS_CACHING diff --git a/api/typescript/src/kurtosis_version/kurtosis_version.ts b/api/typescript/src/kurtosis_version/kurtosis_version.ts index 25ea10e87b..d563a0ed50 100644 --- a/api/typescript/src/kurtosis_version/kurtosis_version.ts +++ b/api/typescript/src/kurtosis_version/kurtosis_version.ts @@ -1,5 +1,5 @@ // !!!!!!!!!!! DO NOT UPDATE! WILL BE MANUALLY UPDATED DURING THE RELEASE PROCESS !!!!!!!!!!!!!!!!!!!!!! // This is necessary so that Kurt Core consumers (e.g. modules) will know if they're compatible with the currently-running // API container -export const KURTOSIS_VERSION: string = "0.86.21" +export const KURTOSIS_VERSION: string = "0.86.25" // !!!!!!!!!!! DO NOT UPDATE! WILL BE MANUALLY UPDATED DURING THE RELEASE PROCESS !!!!!!!!!!!!!!!!!!!!!! diff --git a/cli/cli/command_args/run/verbosity.go b/cli/cli/command_args/run/verbosity.go index 2eb4679b9f..91d6dd374a 100644 --- a/cli/cli/command_args/run/verbosity.go +++ b/cli/cli/command_args/run/verbosity.go @@ -8,4 +8,5 @@ const ( Detailed Executable OutputOnly + Description ) diff --git a/cli/cli/command_args/run/verbosity_enumer.go b/cli/cli/command_args/run/verbosity_enumer.go index 5bfb4c6b2e..4b6251b10d 100644 --- a/cli/cli/command_args/run/verbosity_enumer.go +++ b/cli/cli/command_args/run/verbosity_enumer.go @@ -7,11 +7,11 @@ import ( "strings" ) -const _VerbosityName = "BRIEFDETAILEDEXECUTABLEOUTPUT_ONLY" +const _VerbosityName = "BRIEFDETAILEDEXECUTABLEOUTPUT_ONLYDESCRIPTION" -var _VerbosityIndex = [...]uint8{0, 5, 13, 23, 34} +var _VerbosityIndex = [...]uint8{0, 5, 13, 23, 34, 45} -const _VerbosityLowerName = "briefdetailedexecutableoutput_only" +const _VerbosityLowerName = "briefdetailedexecutableoutput_onlydescription" func (i Verbosity) String() string { if i < 0 || i >= Verbosity(len(_VerbosityIndex)-1) { @@ -28,9 +28,10 @@ func _VerbosityNoOp() { _ = x[Detailed-(1)] _ = x[Executable-(2)] _ = x[OutputOnly-(3)] + _ = x[Description-(4)] } -var _VerbosityValues = []Verbosity{Brief, Detailed, Executable, OutputOnly} +var _VerbosityValues = []Verbosity{Brief, Detailed, Executable, OutputOnly, Description} var _VerbosityNameToValueMap = map[string]Verbosity{ _VerbosityName[0:5]: Brief, @@ -41,6 +42,8 @@ var _VerbosityNameToValueMap = map[string]Verbosity{ _VerbosityLowerName[13:23]: Executable, _VerbosityName[23:34]: OutputOnly, _VerbosityLowerName[23:34]: OutputOnly, + _VerbosityName[34:45]: Description, + _VerbosityLowerName[34:45]: Description, } var _VerbosityNames = []string{ @@ -48,6 +51,7 @@ var _VerbosityNames = []string{ _VerbosityName[5:13], _VerbosityName[13:23], _VerbosityName[23:34], + _VerbosityName[34:45], } // VerbosityString retrieves an enum value from the enum constants string name. diff --git a/cli/cli/commands/run/run.go b/cli/cli/commands/run/run.go index 023d20082f..e271c849ae 100644 --- a/cli/cli/commands/run/run.go +++ b/cli/cli/commands/run/run.go @@ -68,7 +68,7 @@ const ( autogenerateEnclaveIdentifierKeyword = "" verbosityFlagKey = "verbosity" - defaultVerbosity = "brief" + defaultVerbosity = "description" parallelismFlagKey = "parallelism" defaultParallelism = "4" @@ -103,6 +103,9 @@ const ( imageDownloadFlagKey = "image-download" defaultImageDownload = "missing" + nonBlockingModeFlagKey = "non-blocking-tasks" + defaultBlockingMode = "false" + httpProtocolRegexStr = "^(http|https)://" ) @@ -140,7 +143,7 @@ var StarlarkRunCmd = &engine_consuming_kurtosis_command.EngineConsumingKurtosisC }, { Key: verbosityFlagKey, - Usage: fmt.Sprintf("The verbosity of the command output: %s. If unset, it defaults to `brief` for a concise and explicit output. Use `detailed` to display the exhaustive list of arguments for each command. `executable` will generate executable Starlark instructions.", strings.Join(command_args_run.VerbosityStrings(), ", ")), + Usage: fmt.Sprintf("The verbosity of the command output: %s. If unset, it defaults to `description` for a crisp output that explains whats about to happen. Use `brief` for a concise yet explicit ouptut, to see the entire instruction thats about to execute. Use `detailed` to display the exhaustive list of arguments for each instruction. `executable` will generate executable Starlark instructions.", strings.Join(command_args_run.VerbosityStrings(), ", ")), Type: flags.FlagType_String, Shorthand: "v", Default: defaultVerbosity, @@ -204,6 +207,12 @@ var StarlarkRunCmd = &engine_consuming_kurtosis_command.EngineConsumingKurtosisC Type: flags.FlagType_String, Default: defaultImageDownload, }, + { + Key: nonBlockingModeFlagKey, + Usage: "If set, Kurtosis will not block on removing services from tasks from run_sh and run_python instructions. These services will remain and must be manually cleaned up.", + Type: flags.FlagType_Bool, + Default: defaultBlockingMode, + }, }, Args: []*args.ArgConfig{ // TODO add a `Usage` description here when ArgConfig supports it @@ -309,6 +318,11 @@ func run( return stacktrace.Propagate(err, "Expected a value for the '%v' flag but failed to get it", packageArgsFileFlagKey) } + nonBlockingMode, err := flags.GetBool(nonBlockingModeFlagKey) + if err != nil { + return stacktrace.Propagate(err, "Expected a value for the '%v' flag but failed to get it", nonBlockingModeFlagKey) + } + if packageArgs == inputArgsAreEmptyBracesByDefault && packageArgsFile != packageArgsFileDefaultValue { logrus.Debugf("'%v' is empty but '%v' is provided so we will go with the '%v' value", inputArgsArgKey, packageArgsFileFlagKey, packageArgsFileFlagKey) packageArgs, err = getArgsFromFilepathOrURL(packageArgsFile) @@ -327,6 +341,7 @@ func run( starlark_run_config.WithRelativePathToMainFile(relativePathToTheMainFile), starlark_run_config.WithSerializedParams(packageArgs), starlark_run_config.WithImageDownloadMode(*imageDownload), + starlark_run_config.WithNonBlockingMode(nonBlockingMode), ) kurtosisCtx, err := kurtosis_context.NewKurtosisContextFromLocalEngine() diff --git a/cli/cli/helpers/output_printers/kurtosis_instruction_printer.go b/cli/cli/helpers/output_printers/kurtosis_instruction_printer.go index 465d97e790..6fe307e23a 100644 --- a/cli/cli/helpers/output_printers/kurtosis_instruction_printer.go +++ b/cli/cli/helpers/output_printers/kurtosis_instruction_printer.go @@ -189,6 +189,8 @@ func formatInfo(infoMessage string) string { func formatInstruction(instruction *kurtosis_core_rpc_api_bindings.StarlarkInstruction, verbosity run.Verbosity) string { var serializedInstruction string switch verbosity { + case run.Description: + serializedInstruction = instruction.Description case run.Brief: serializedInstruction = formatInstructionToReadableString(instruction, false) case run.Detailed: diff --git a/cli/cli/helpers/output_printers/kurtosis_instruction_printer_test.go b/cli/cli/helpers/output_printers/kurtosis_instruction_printer_test.go index 82c2f95eb7..4660c206ee 100644 --- a/cli/cli/helpers/output_printers/kurtosis_instruction_printer_test.go +++ b/cli/cli/helpers/output_printers/kurtosis_instruction_printer_test.go @@ -27,7 +27,8 @@ func testInstruction() *kurtosis_core_rpc_api_bindings.StarlarkInstruction { binding_constructors.NewStarlarkInstructionKwarg("serviceA", "kwarg1", true), binding_constructors.NewStarlarkInstructionKwarg(`struct(bonjour=42, hello="world")`, "kwarg2", false), }, - isSkipped) + isSkipped, + "description") } func TestFormatInstruction_Executable(t *testing.T) { @@ -74,7 +75,8 @@ func TestFormatInstruction_FormattingFail(t *testing.T) { // This has issues with the quotes not being escaped `print("UNSUPPORTED_TYPE['ModuleOutput(grafana_info=GrafanaInfo(dashboard_path="/d/QdTOwy-nz/eth2-merge-kurtosis-module-dashboard?orgId=1", user="admin", password="admin"))']")`, []*kurtosis_core_rpc_api_bindings.StarlarkInstructionArg{}, - isSkipped) + isSkipped, + "description") formattedInstruction := formatInstruction(instruction, run.Executable) // failure to format -> the instruction is returned with no formatting applied expectedResult := `# from dummyFile[12:4] diff --git a/core/server/Dockerfile b/core/server/Dockerfile index 83fa2599d1..f601298e67 100644 --- a/core/server/Dockerfile +++ b/core/server/Dockerfile @@ -4,9 +4,10 @@ FROM alpine:3.17 RUN apk update && apk add --no-cache bash protobuf-dev sudo shadow curl xz # Install Nix -# We need to set filter-syscalls to false to allow Nix to work properly inside a container: https://github.com/NixOS/nix/issues/5258 -ENV NIX_CONFIG=$'filter-syscalls = false\nexperimental-features = nix-command flakes' -RUN sh <(curl -L https://nixos.org/nix/install) --daemon --yes +# We need to set filter-syscalls to false to allow Nix install to work properly inside a container with cross platform emulation +# via QEMU: https://github.com/NixOS/nix/issues/5258 and use a more flexible installer https://github.com/DeterminateSystems/nix-installer +# with a workaround on the same issue: https://github.com/DeterminateSystems/nix-installer/issues/324) +RUN curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install linux --no-confirm --init none --extra-conf "filter-syscalls = false" ARG TARGETARCH diff --git a/core/server/Dockerfile.debug b/core/server/Dockerfile.debug index 0061f97af8..a224ddcf48 100644 --- a/core/server/Dockerfile.debug +++ b/core/server/Dockerfile.debug @@ -4,9 +4,10 @@ FROM alpine:3.19 RUN apk update && apk add --no-cache bash protobuf-dev sudo shadow curl xz # Install Nix -# We need to set filter-syscalls to false to allow Nix to work properly inside a container: https://github.com/NixOS/nix/issues/5258 -ENV NIX_CONFIG=$'filter-syscalls = false\nexperimental-features = nix-command flakes' -RUN sh <(curl -L https://nixos.org/nix/install) --daemon --yes +# We need to set filter-syscalls to false to allow Nix install to work properly inside a container with cross platform emulation +# via QEMU: https://github.com/NixOS/nix/issues/5258 and use a more flexible installer https://github.com/DeterminateSystems/nix-installer +# with a workaround on the same issue: https://github.com/DeterminateSystems/nix-installer/issues/324) +RUN curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install linux --no-confirm --init none --extra-conf "filter-syscalls = false" # Make sure that you changed the port inside the APIC's code before changing it here EXPOSE 50103 diff --git a/core/server/api_container/server/api_container_service.go b/core/server/api_container/server/api_container_service.go index 7fbd5af348..74d8bb5f2b 100644 --- a/core/server/api_container/server/api_container_service.go +++ b/core/server/api_container/server/api_container_service.go @@ -146,7 +146,7 @@ func (apicService *ApiContainerService) RunStarlarkScript(args *kurtosis_core_rp mainFuncName := args.GetMainFunctionName() experimentalFeatures := args.GetExperimentalFeatures() ApiDownloadMode := shared_utils.GetOrDefault(args.ImageDownloadMode, defaultImageDownloadMode) - + nonBlockingMode := args.GetNonBlockingMode() downloadMode := convertFromImageDownloadModeAPI(ApiDownloadMode) metricsErr := apicService.metricsClient.TrackKurtosisRun(startosis_constants.PackageIdPlaceholderForStandaloneScript, isNotRemote, dryRun, isScript) @@ -155,7 +155,19 @@ func (apicService *ApiContainerService) RunStarlarkScript(args *kurtosis_core_rp } noPackageReplaceOptions := map[string]string{} - apicService.runStarlark(parallelism, dryRun, startosis_constants.PackageIdPlaceholderForStandaloneScript, noPackageReplaceOptions, mainFuncName, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, serializedStarlarkScript, serializedParams, downloadMode, args.GetExperimentalFeatures(), stream) + apicService.runStarlark( + parallelism, + dryRun, + startosis_constants.PackageIdPlaceholderForStandaloneScript, + noPackageReplaceOptions, + mainFuncName, + startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, + serializedStarlarkScript, + serializedParams, + downloadMode, + nonBlockingMode, + args.GetExperimentalFeatures(), + stream) apicService.starlarkRun = &kurtosis_core_rpc_api_bindings.GetStarlarkRunResponse{ PackageId: startosis_constants.PackageIdPlaceholderForStandaloneScript, @@ -248,6 +260,7 @@ func (apicService *ApiContainerService) RunStarlarkPackage(args *kurtosis_core_r mainFuncName := args.GetMainFunctionName() ApiDownloadMode := shared_utils.GetOrDefault(args.ImageDownloadMode, defaultImageDownloadMode) downloadMode := convertFromImageDownloadModeAPI(ApiDownloadMode) + nonBlockignMode := args.GetNonBlockingMode() var scriptWithRunFunction string var interpretationError *startosis_errors.InterpretationError @@ -280,7 +293,7 @@ func (apicService *ApiContainerService) RunStarlarkPackage(args *kurtosis_core_r if metricsErr != nil { logrus.Warn("An error occurred tracking kurtosis run event") } - apicService.runStarlark(parallelism, dryRun, detectedPackageId, detectedPackageReplaceOptions, mainFuncName, actualRelativePathToMainFile, scriptWithRunFunction, serializedParams, downloadMode, args.ExperimentalFeatures, stream) + apicService.runStarlark(parallelism, dryRun, detectedPackageId, detectedPackageReplaceOptions, mainFuncName, actualRelativePathToMainFile, scriptWithRunFunction, serializedParams, downloadMode, nonBlockignMode, args.ExperimentalFeatures, stream) apicService.starlarkRun = &kurtosis_core_rpc_api_bindings.GetStarlarkRunResponse{ PackageId: packageIdFromArgs, @@ -823,10 +836,11 @@ func (apicService *ApiContainerService) runStarlark( serializedStarlark string, serializedParams string, imageDownloadMode image_download_mode.ImageDownloadMode, + nonBlockingMode bool, experimentalFeatures []kurtosis_core_rpc_api_bindings.KurtosisFeatureFlag, stream grpc.ServerStream, ) { - responseLineStream := apicService.startosisRunner.Run(stream.Context(), dryRun, parallelism, packageId, packageReplaceOptions, mainFunctionName, relativePathToMainFile, serializedStarlark, serializedParams, imageDownloadMode, experimentalFeatures) + responseLineStream := apicService.startosisRunner.Run(stream.Context(), dryRun, parallelism, packageId, packageReplaceOptions, mainFunctionName, relativePathToMainFile, serializedStarlark, serializedParams, imageDownloadMode, nonBlockingMode, experimentalFeatures) for { select { case <-stream.Context().Done(): diff --git a/core/server/api_container/server/startosis_engine/kurtosis_builtins.go b/core/server/api_container/server/startosis_engine/kurtosis_builtins.go index 5aeae0154e..1afae0c723 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_builtins.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_builtins.go @@ -59,6 +59,7 @@ func KurtosisPlanInstructions( runtimeValueStore *runtime_value_store.RuntimeValueStore, packageContentProvider startosis_packages.PackageContentProvider, packageReplaceOptions map[string]string, + nonBlockingMode bool, ) []*kurtosis_plan_instruction.KurtosisPlanInstruction { return []*kurtosis_plan_instruction.KurtosisPlanInstruction{ add_service.NewAddService(serviceNetwork, runtimeValueStore, packageId, packageContentProvider, packageReplaceOptions), @@ -70,8 +71,8 @@ func KurtosisPlanInstructions( render_templates.NewRenderTemplatesInstruction(serviceNetwork, runtimeValueStore), request.NewRequest(serviceNetwork, runtimeValueStore), start_service.NewStartService(serviceNetwork), - tasks.NewRunPythonService(serviceNetwork, runtimeValueStore), - tasks.NewRunShService(serviceNetwork, runtimeValueStore), + tasks.NewRunPythonService(serviceNetwork, runtimeValueStore, nonBlockingMode), + tasks.NewRunShService(serviceNetwork, runtimeValueStore, nonBlockingMode), stop_service.NewStopService(serviceNetwork), store_service_files.NewStoreServiceFiles(serviceNetwork), upload_files.NewUploadFiles(packageId, serviceNetwork, packageContentProvider, packageReplaceOptions), diff --git a/core/server/api_container/server/startosis_engine/kurtosis_instruction/add_service/add_service.go b/core/server/api_container/server/startosis_engine/kurtosis_instruction/add_service/add_service.go index f948d3ce71..a3686e9a6d 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_instruction/add_service/add_service.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_instruction/add_service/add_service.go @@ -231,6 +231,10 @@ func (builtin *AddServiceCapabilities) FillPersistableAttributes(builder *enclav ) } +func (builtin *AddServiceCapabilities) Description() string { + return fmt.Sprintf("Adding service with name '%v' and image '%v'", builtin.serviceName, builtin.serviceConfig.GetContainerImageName()) +} + func validateAndConvertConfigAndReadyCondition( serviceNetwork service_network.ServiceNetwork, rawConfig starlark.Value, diff --git a/core/server/api_container/server/startosis_engine/kurtosis_instruction/add_service/add_services.go b/core/server/api_container/server/startosis_engine/kurtosis_instruction/add_service/add_services.go index f5c2f372c0..a99eaa6ee2 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_instruction/add_service/add_services.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_instruction/add_service/add_services.go @@ -353,6 +353,19 @@ func (builtin *AddServicesCapabilities) allServicesReadinessCheck( return failedServiceChecksRegularMap } +func (builtin *AddServicesCapabilities) Description() string { + return fmt.Sprintf("Adding '%v' services with names '%v'", len(builtin.serviceConfigs), getNamesAsCommaSeparatedList(builtin.serviceConfigs)) +} + +func getNamesAsCommaSeparatedList(serviceConfigs map[service.ServiceName]*service.ServiceConfig) string { + var serviceNames []string + serviceNameSeparator := "," + for serviceName := range serviceConfigs { + serviceNames = append(serviceNames, string(serviceName)) + } + return strings.Join(serviceNames, serviceNameSeparator) +} + func (builtin *AddServicesCapabilities) runServiceReadinessCheck( ctx context.Context, wg *sync.WaitGroup, diff --git a/core/server/api_container/server/startosis_engine/kurtosis_instruction/exec/exec.go b/core/server/api_container/server/startosis_engine/kurtosis_instruction/exec/exec.go index 7f95de1e03..312423550b 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_instruction/exec/exec.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_instruction/exec/exec.go @@ -189,6 +189,10 @@ func (builtin *ExecCapabilities) FillPersistableAttributes(builder *enclave_plan builder.SetType(ExecBuiltinName) } +func (builtin *ExecCapabilities) Description() string { + return fmt.Sprintf("Executing command on service '%v'", builtin.serviceName) +} + func (builtin *ExecCapabilities) isAcceptableCode(recipeResult map[string]starlark.Comparable) bool { isAcceptableCode := false for _, acceptableCode := range builtin.acceptableCodes { diff --git a/core/server/api_container/server/startosis_engine/kurtosis_instruction/kurtosis_print/kurtosis_print.go b/core/server/api_container/server/startosis_engine/kurtosis_instruction/kurtosis_print/kurtosis_print.go index ee70b3db91..c76f713e3b 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_instruction/kurtosis_print/kurtosis_print.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_instruction/kurtosis_print/kurtosis_print.go @@ -99,3 +99,7 @@ func (builtin *PrintCapabilities) TryResolveWith(instructionsAreEqual bool, _ *e func (builtin *PrintCapabilities) FillPersistableAttributes(builder *enclave_plan_persistence.EnclavePlanInstructionBuilder) { builder.SetType(PrintBuiltinName) } + +func (builtin *PrintCapabilities) Description() string { + return "Printing a message" +} diff --git a/core/server/api_container/server/startosis_engine/kurtosis_instruction/remove_service/remove_service.go b/core/server/api_container/server/startosis_engine/kurtosis_instruction/remove_service/remove_service.go index 153b4d9735..6285791e2d 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_instruction/remove_service/remove_service.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_instruction/remove_service/remove_service.go @@ -101,3 +101,7 @@ func (builtin *RemoveServiceCapabilities) FillPersistableAttributes(builder *enc builtin.serviceName, ) } + +func (builtin *RemoveServiceCapabilities) Description() string { + return fmt.Sprintf("Removing service '%v'", builtin.serviceName) +} diff --git a/core/server/api_container/server/startosis_engine/kurtosis_instruction/render_templates/render_templates.go b/core/server/api_container/server/startosis_engine/kurtosis_instruction/render_templates/render_templates.go index 6277148eb0..7fa2138c51 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_instruction/render_templates/render_templates.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_instruction/render_templates/render_templates.go @@ -168,6 +168,10 @@ func (builtin *RenderTemplatesCapabilities) FillPersistableAttributes(builder *e ) } +func (builtin *RenderTemplatesCapabilities) Description() string { + return fmt.Sprintf("Rendering a template to a files artifact with name '%v'", builtin.artifactName) +} + func parseTemplatesAndData(templatesAndData *starlark.Dict) (map[string]*render_templates.TemplateData, *startosis_errors.InterpretationError) { templateAndDataByDestRelFilepath := make(map[string]*render_templates.TemplateData) for _, relPathInFilesArtifactKey := range templatesAndData.Keys() { diff --git a/core/server/api_container/server/startosis_engine/kurtosis_instruction/request/request.go b/core/server/api_container/server/startosis_engine/kurtosis_instruction/request/request.go index 15ed20994c..22061db92c 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_instruction/request/request.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_instruction/request/request.go @@ -2,6 +2,7 @@ package request import ( "context" + "fmt" "github.com/kurtosis-tech/kurtosis/container-engine-lib/lib/backend_interface/objects/service" "github.com/kurtosis-tech/kurtosis/core/server/api_container/server/service_network" "github.com/kurtosis-tech/kurtosis/core/server/api_container/server/startosis_engine/enclave_plan_persistence" @@ -201,6 +202,10 @@ func (builtin *RequestCapabilities) FillPersistableAttributes(builder *enclave_p builder.SetType(RequestBuiltinName) } +func (builtin *RequestCapabilities) Description() string { + return fmt.Sprintf("Running '%v' request on service '%v'", builtin.httpRequestRecipe.RequestType(), builtin.serviceName) +} + func (builtin *RequestCapabilities) isAcceptableCode(recipeResult map[string]starlark.Comparable) bool { isAcceptableCode := false for _, acceptableCode := range builtin.acceptableCodes { diff --git a/core/server/api_container/server/startosis_engine/kurtosis_instruction/start_service/start_service.go b/core/server/api_container/server/startosis_engine/kurtosis_instruction/start_service/start_service.go index 9aa6ecc24b..f5e40901c5 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_instruction/start_service/start_service.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_instruction/start_service/start_service.go @@ -97,3 +97,7 @@ func (builtin *StartServiceCapabilities) FillPersistableAttributes(builder *encl builtin.serviceName, ) } + +func (builtin *StartServiceCapabilities) Description() string { + return fmt.Sprintf("Starting service '%v'", builtin.serviceName) +} diff --git a/core/server/api_container/server/startosis_engine/kurtosis_instruction/stop_service/stop_service.go b/core/server/api_container/server/startosis_engine/kurtosis_instruction/stop_service/stop_service.go index 13f8dba3d6..7ca91287d8 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_instruction/stop_service/stop_service.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_instruction/stop_service/stop_service.go @@ -97,3 +97,7 @@ func (builtin *StopServiceCapabilities) FillPersistableAttributes(builder *encla builtin.serviceName, ) } + +func (builtin *StopServiceCapabilities) Description() string { + return fmt.Sprintf("Stopping service '%v'", builtin.serviceName) +} diff --git a/core/server/api_container/server/startosis_engine/kurtosis_instruction/store_service_files/store_service_files.go b/core/server/api_container/server/startosis_engine/kurtosis_instruction/store_service_files/store_service_files.go index c180717ae8..dac882f296 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_instruction/store_service_files/store_service_files.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_instruction/store_service_files/store_service_files.go @@ -171,3 +171,7 @@ func (builtin *StoreServiceFilesCapabilities) FillPersistableAttributes(builder builtin.artifactName, nil, ) } + +func (builtin *StoreServiceFilesCapabilities) Description() string { + return fmt.Sprintf("Storing files from service '%v' at path '%v' to files artifact with name '%v'", builtin.serviceName, builtin.src, builtin.artifactName) +} diff --git a/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/run_python.go b/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/run_python.go index 9633e36c51..5ebd17ac9f 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/run_python.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/run_python.go @@ -40,7 +40,7 @@ const ( successfulPipRunExitCode = 0 ) -func NewRunPythonService(serviceNetwork service_network.ServiceNetwork, runtimeValueStore *runtime_value_store.RuntimeValueStore) *kurtosis_plan_instruction.KurtosisPlanInstruction { +func NewRunPythonService(serviceNetwork service_network.ServiceNetwork, runtimeValueStore *runtime_value_store.RuntimeValueStore, nonBlockingMode bool) *kurtosis_plan_instruction.KurtosisPlanInstruction { return &kurtosis_plan_instruction.KurtosisPlanInstruction{ KurtosisBaseBuiltin: &kurtosis_starlark_framework.KurtosisBaseBuiltin{ Name: RunPythonBuiltinName, @@ -100,6 +100,7 @@ func NewRunPythonService(serviceNetwork service_network.ServiceNetwork, runtimeV pythonArguments: nil, packages: nil, name: "", + nonBlockingMode: nonBlockingMode, serviceConfig: nil, // populated at interpretation time run: "", // populated at interpretation time resultUuid: "", // populated at interpretation time @@ -124,9 +125,10 @@ type RunPythonCapabilities struct { runtimeValueStore *runtime_value_store.RuntimeValueStore serviceNetwork service_network.ServiceNetwork - resultUuid string - name string - run string + resultUuid string + name string + run string + nonBlockingMode bool pythonArguments []string packages []string @@ -303,8 +305,12 @@ func (builtin *RunPythonCapabilities) Execute(ctx context.Context, _ *builtin_ar } } - if err = removeService(ctx, builtin.serviceNetwork, builtin.name); err != nil { - return "", stacktrace.Propagate(err, "attempted to remove the temporary task container but failed") + // If the user indicated not to block on removing services after tasks, don't remove the service. + // The user will have to remove the task service themselves or it will get cleaned up with Kurtosis clean. + if !builtin.nonBlockingMode { + if err = removeService(ctx, builtin.serviceNetwork, builtin.name); err != nil { + return "", stacktrace.Propagate(err, "attempted to remove the temporary task container but failed") + } } return instructionResult, err @@ -321,6 +327,10 @@ func (builtin *RunPythonCapabilities) FillPersistableAttributes(builder *enclave builder.SetType(RunPythonBuiltinName) } +func (builtin *RunPythonCapabilities) Description() string { + return "Running Python script" +} + func setupRequiredPackages(ctx context.Context, builtin *RunPythonCapabilities) (*exec_result.ExecResult, error) { if len(builtin.packages) == 0 { return nil, nil @@ -352,9 +362,9 @@ func getPythonCommandToRun(builtin *RunPythonCapabilities) (string, error) { maybePythonArgumentsWithRuntimeValueReplaced = append(maybePythonArgumentsWithRuntimeValueReplaced, maybePythonArgumentWithRuntimeValueReplaced) } argumentsAsString := strings.Join(maybePythonArgumentsWithRuntimeValueReplaced, spaceDelimiter) - + runEscaped := strings.ReplaceAll(builtin.run, `"`, `\"`) if len(argumentsAsString) > 0 { - return fmt.Sprintf("python -c '%s' %s", builtin.run, argumentsAsString), nil + return fmt.Sprintf(`python -c "%s" %s`, runEscaped, argumentsAsString), nil } - return fmt.Sprintf("python -c '%s'", builtin.run), nil + return fmt.Sprintf(`python -c "%s"`, runEscaped), nil } diff --git a/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/run_sh.go b/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/run_sh.go index d73e062c35..324fe2024b 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/run_sh.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/run_sh.go @@ -26,10 +26,12 @@ import ( const ( RunShBuiltinName = "run_sh" - defaultRunShImageName = "badouralix/curl-jq" + defaultRunShImageName = "badouralix/curl-jq" + shScriptPrintCharLimit = 80 + runningShScriptPrefix = "Running sh script" ) -func NewRunShService(serviceNetwork service_network.ServiceNetwork, runtimeValueStore *runtime_value_store.RuntimeValueStore) *kurtosis_plan_instruction.KurtosisPlanInstruction { +func NewRunShService(serviceNetwork service_network.ServiceNetwork, runtimeValueStore *runtime_value_store.RuntimeValueStore, nonBlockingMode bool) *kurtosis_plan_instruction.KurtosisPlanInstruction { return &kurtosis_plan_instruction.KurtosisPlanInstruction{ KurtosisBaseBuiltin: &kurtosis_starlark_framework.KurtosisBaseBuiltin{ Name: RunShBuiltinName, @@ -82,6 +84,7 @@ func NewRunShService(serviceNetwork service_network.ServiceNetwork, runtimeValue serviceNetwork: serviceNetwork, runtimeValueStore: runtimeValueStore, name: "", + nonBlockingMode: nonBlockingMode, serviceConfig: nil, // populated at interpretation time run: "", // populated at interpretation time resultUuid: "", // populated at interpretation time @@ -105,9 +108,10 @@ type RunShCapabilities struct { runtimeValueStore *runtime_value_store.RuntimeValueStore serviceNetwork service_network.ServiceNetwork - resultUuid string - name string - run string + resultUuid string + name string + run string + nonBlockingMode bool serviceConfig *service.ServiceConfig storeSpecList []*store_spec.StoreSpec @@ -248,8 +252,12 @@ func (builtin *RunShCapabilities) Execute(ctx context.Context, _ *builtin_argume } } - if err = removeService(ctx, builtin.serviceNetwork, builtin.name); err != nil { - return "", stacktrace.Propagate(err, "attempted to remove the temporary task container but failed") + // If the user indicated not to block on removing services after tasks, don't remove the service. + // The user will have to remove the task service themselves, or it will get cleaned up with Kurtosis clean. + if !builtin.nonBlockingMode { + if err = removeService(ctx, builtin.serviceNetwork, builtin.name); err != nil { + return "", stacktrace.Propagate(err, "attempted to remove the temporary task container but failed") + } } return instructionResult, err @@ -266,6 +274,13 @@ func (builtin *RunShCapabilities) FillPersistableAttributes(builder *enclave_pla builder.SetType(RunShBuiltinName) } +func (builtin *RunShCapabilities) Description() string { + if len(builtin.run) < shScriptPrintCharLimit { + return fmt.Sprintf("%v: `%v`", runningShScriptPrefix, builtin.run) + } + return runningShScriptPrefix +} + func getCommandToRun(builtin *RunShCapabilities) (string, error) { // replace future references to actual strings maybeSubCommandWithRuntimeValues, err := magic_string_helper.ReplaceRuntimeValueInString(builtin.run, builtin.runtimeValueStore) diff --git a/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/tasks_shared.go b/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/tasks_shared.go index 2632a5eb6c..9e683100bf 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/tasks_shared.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/tasks_shared.go @@ -297,7 +297,7 @@ func formatErrorMessage(errorMessage string, errorFromExec string) string { func removeService(ctx context.Context, serviceNetwork service_network.ServiceNetwork, serviceName string) error { _, err := serviceNetwork.RemoveService(ctx, serviceName) if err != nil { - return stacktrace.NewError("error occurred while removing task with name %v", serviceName) + return stacktrace.Propagate(err, "error occurred while removing task with name %v", serviceName) } return nil } diff --git a/core/server/api_container/server/startosis_engine/kurtosis_instruction/upload_files/upload_files.go b/core/server/api_container/server/startosis_engine/kurtosis_instruction/upload_files/upload_files.go index cf2135e225..0178ec8e21 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_instruction/upload_files/upload_files.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_instruction/upload_files/upload_files.go @@ -213,3 +213,7 @@ func (builtin *UploadFilesCapabilities) FillPersistableAttributes(builder *encla builtin.artifactName, builtin.filesArtifactMd5, ) } + +func (builtin *UploadFilesCapabilities) Description() string { + return fmt.Sprintf("Uploading file '%v' to files artifact '%v'", builtin.src, builtin.artifactName) +} diff --git a/core/server/api_container/server/startosis_engine/kurtosis_instruction/verify/verify.go b/core/server/api_container/server/startosis_engine/kurtosis_instruction/verify/verify.go index abeab09a6f..9670160037 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_instruction/verify/verify.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_instruction/verify/verify.go @@ -155,6 +155,10 @@ func (builtin *VerifyCapabilities) FillPersistableAttributes(builder *enclave_pl builder.SetType(VerifyBuiltinName) } +func (builtin *VerifyCapabilities) Description() string { + return fmt.Sprintf("Verifying whether two values meet a certain condition '%v'", builtin.assertion) +} + // Verify verifies whether the currentValue matches the targetValue w.r.t. the assertion operator // TODO: This and ValidateVerificationToken below are used by both verify and wait. Refactor it to a better place func Verify(currentValue starlark.Comparable, assertion string, targetValue starlark.Comparable) error { diff --git a/core/server/api_container/server/startosis_engine/kurtosis_instruction/wait/wait.go b/core/server/api_container/server/startosis_engine/kurtosis_instruction/wait/wait.go index 4c6f228c6a..7de94826fc 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_instruction/wait/wait.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_instruction/wait/wait.go @@ -288,3 +288,7 @@ func (builtin *WaitCapabilities) TryResolveWith(instructionsAreEqual bool, _ *en func (builtin *WaitCapabilities) FillPersistableAttributes(builder *enclave_plan_persistence.EnclavePlanInstructionBuilder) { builder.SetType(WaitBuiltinName) } + +func (builtin *WaitCapabilities) Description() string { + return fmt.Sprintf("Waiting for at most '%v' for service '%v' to reach a certain state", builtin.timeout, builtin.serviceName) +} diff --git a/core/server/api_container/server/startosis_engine/kurtosis_starlark_framework/kurtosis_plan_instruction/kurtosis_plan_instruction_capabilities.go b/core/server/api_container/server/startosis_engine/kurtosis_starlark_framework/kurtosis_plan_instruction/kurtosis_plan_instruction_capabilities.go index a96e12a9f8..66ca407c64 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_starlark_framework/kurtosis_plan_instruction/kurtosis_plan_instruction_capabilities.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_starlark_framework/kurtosis_plan_instruction/kurtosis_plan_instruction_capabilities.go @@ -22,4 +22,7 @@ type KurtosisPlanInstructionCapabilities interface { // FillPersistableAttributes adds to the builder the attributes of the instruction that needs to be persisted to the // enclave database to power idempotent runs. FillPersistableAttributes(builder *enclave_plan_persistence.EnclavePlanInstructionBuilder) + + // Description Brief description of the instruction based on its contents + Description() string } diff --git a/core/server/api_container/server/startosis_engine/kurtosis_starlark_framework/kurtosis_plan_instruction/kurtosis_plan_instruction_internal.go b/core/server/api_container/server/startosis_engine/kurtosis_starlark_framework/kurtosis_plan_instruction/kurtosis_plan_instruction_internal.go index 0db17f3950..e05a718083 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_starlark_framework/kurtosis_plan_instruction/kurtosis_plan_instruction_internal.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_starlark_framework/kurtosis_plan_instruction/kurtosis_plan_instruction_internal.go @@ -46,7 +46,7 @@ func (builtin *kurtosisPlanInstructionInternal) GetCanonicalInstruction(isSkippe } args[idx] = binding_constructors.NewStarlarkInstructionKwarg(builtin_argument.StringifyArgumentValue(value), name, shouldBeDisplayed) } - return binding_constructors.NewStarlarkInstruction(builtin.GetPosition().ToAPIType(), builtin.GetName(), builtin.String(), args, isSkipped) + return binding_constructors.NewStarlarkInstruction(builtin.GetPosition().ToAPIType(), builtin.GetName(), builtin.String(), args, isSkipped, builtin.capabilities.Description()) } // GetPositionInOriginalScript is here to implement the KurtosisInstruction interface. Remove it when it's not needed anymore diff --git a/core/server/api_container/server/startosis_engine/startosis_executor_test.go b/core/server/api_container/server/startosis_engine/startosis_executor_test.go index 8da1fa06d7..be3b507256 100644 --- a/core/server/api_container/server/startosis_engine/startosis_executor_test.go +++ b/core/server/api_container/server/startosis_engine/startosis_executor_test.go @@ -52,12 +52,12 @@ func TestExecuteKurtosisInstructions_ExecuteForReal_Success(t *testing.T) { executor := NewStartosisExecutor(nil, runtimeValueStore, enclave_plan_persistence.NewEnclavePlan(), enclaveDb) instructionsPlan := instructions_plan.NewInstructionsPlan() - instruction1 := createMockInstruction(t, "instruction1", executeSuccessfully) + instruction1 := createMockInstruction(t, "instruction1", executeSuccessfully, "description1") scheduledInstruction1 := instructions_plan.NewScheduledInstruction("instruction1", instruction1, starlark.None).Executed(true) instructionsPlan.AddScheduledInstruction(scheduledInstruction1) - instruction2 := createMockInstruction(t, "instruction2", executeSuccessfully) - instruction3 := createMockInstruction(t, "instruction3", executeSuccessfully) + instruction2 := createMockInstruction(t, "instruction2", executeSuccessfully, "description2") + instruction3 := createMockInstruction(t, "instruction3", executeSuccessfully, "description3") require.NoError(t, instructionsPlan.AddInstruction(instruction2, starlark.None)) require.NoError(t, instructionsPlan.AddInstruction(instruction3, starlark.None)) @@ -75,11 +75,11 @@ func TestExecuteKurtosisInstructions_ExecuteForReal_Success(t *testing.T) { expectedSerializedInstructions := []*kurtosis_core_rpc_api_bindings.StarlarkInstruction{ binding_constructors.NewStarlarkInstruction( - dummyPosition.ToAPIType(), "instruction1", "instruction1()", noInstructionArgsForTesting, isSkipped), + dummyPosition.ToAPIType(), "instruction1", "instruction1()", noInstructionArgsForTesting, isSkipped, "description1"), binding_constructors.NewStarlarkInstruction( - dummyPosition.ToAPIType(), "instruction2", "instruction2()", noInstructionArgsForTesting, isSkipped), + dummyPosition.ToAPIType(), "instruction2", "instruction2()", noInstructionArgsForTesting, isSkipped, "description2"), binding_constructors.NewStarlarkInstruction( - dummyPosition.ToAPIType(), "instruction3", "instruction3()", noInstructionArgsForTesting, isSkipped), + dummyPosition.ToAPIType(), "instruction3", "instruction3()", noInstructionArgsForTesting, isSkipped, "description3"), } require.Equal(t, expectedSerializedInstructions, serializedInstruction) require.Equal(t, executor.enclavePlan.Size(), 3) // check that the enclave plan now contains the 4 instructions @@ -95,9 +95,9 @@ func TestExecuteKurtosisInstructions_ExecuteForReal_FailureHalfWay(t *testing.T) executor := NewStartosisExecutor(nil, runtimeValueStore, enclave_plan_persistence.NewEnclavePlan(), enclaveDb) - instruction1 := createMockInstruction(t, "instruction1", executeSuccessfully) - instruction2 := createMockInstruction(t, "instruction2", throwOnExecute) - instruction3 := createMockInstruction(t, "instruction3", executeSuccessfully) + instruction1 := createMockInstruction(t, "instruction1", executeSuccessfully, "description1") + instruction2 := createMockInstruction(t, "instruction2", throwOnExecute, "description2") + instruction3 := createMockInstruction(t, "instruction3", executeSuccessfully, "description3") instructionsPlan := instructions_plan.NewInstructionsPlan() require.NoError(t, instructionsPlan.AddInstruction(instruction1, starlark.None)) require.NoError(t, instructionsPlan.AddInstruction(instruction2, starlark.None)) @@ -123,9 +123,9 @@ instruction2() expectedSerializedInstructions := []*kurtosis_core_rpc_api_bindings.StarlarkInstruction{ // only instruction 1 and 2 because it failed at instruction 2 binding_constructors.NewStarlarkInstruction( - dummyPosition.ToAPIType(), "instruction1", "instruction1()", noInstructionArgsForTesting, isSkipped), + dummyPosition.ToAPIType(), "instruction1", "instruction1()", noInstructionArgsForTesting, isSkipped, "description1"), binding_constructors.NewStarlarkInstruction( - dummyPosition.ToAPIType(), "instruction2", "instruction2()", noInstructionArgsForTesting, isSkipped), + dummyPosition.ToAPIType(), "instruction2", "instruction2()", noInstructionArgsForTesting, isSkipped, "description2"), } require.Equal(t, expectedSerializedInstructions, serializedInstruction) } @@ -140,8 +140,8 @@ func TestExecuteKurtosisInstructions_DoDryRun(t *testing.T) { executor := NewStartosisExecutor(nil, runtimeValueStore, enclave_plan_persistence.NewEnclavePlan(), enclaveDb) - instruction1 := createMockInstruction(t, "instruction1", executeSuccessfully) - instruction2 := createMockInstruction(t, "instruction2", executeSuccessfully) + instruction1 := createMockInstruction(t, "instruction1", executeSuccessfully, "description1") + instruction2 := createMockInstruction(t, "instruction2", executeSuccessfully, "description2") instructionsPlan := instructions_plan.NewInstructionsPlan() require.NoError(t, instructionsPlan.AddInstruction(instruction1, starlark.None)) require.NoError(t, instructionsPlan.AddInstruction(instruction2, starlark.None)) @@ -157,19 +157,19 @@ func TestExecuteKurtosisInstructions_DoDryRun(t *testing.T) { expectedSerializedInstructions := []*kurtosis_core_rpc_api_bindings.StarlarkInstruction{ binding_constructors.NewStarlarkInstruction( - dummyPosition.ToAPIType(), "instruction1", "instruction1()", noInstructionArgsForTesting, isSkipped), + dummyPosition.ToAPIType(), "instruction1", "instruction1()", noInstructionArgsForTesting, isSkipped, "description1"), binding_constructors.NewStarlarkInstruction( - dummyPosition.ToAPIType(), "instruction2", "instruction2()", noInstructionArgsForTesting, isSkipped), + dummyPosition.ToAPIType(), "instruction2", "instruction2()", noInstructionArgsForTesting, isSkipped, "description2"), } require.Equal(t, serializedInstruction, expectedSerializedInstructions) } -func createMockInstruction(t *testing.T, instructionName string, executeSuccessfully bool) *mock_instruction.MockKurtosisInstruction { +func createMockInstruction(t *testing.T, instructionName string, executeSuccessfully bool, description string) *mock_instruction.MockKurtosisInstruction { instruction := mock_instruction.NewMockKurtosisInstruction(t) stringifiedInstruction := instructionName + "()" canonicalInstruction := binding_constructors.NewStarlarkInstruction( - dummyPosition.ToAPIType(), instructionName, stringifiedInstruction, noInstructionArgsForTesting, isSkipped) + dummyPosition.ToAPIType(), instructionName, stringifiedInstruction, noInstructionArgsForTesting, isSkipped, description) instruction.EXPECT().GetCanonicalInstruction(mock.Anything).Maybe().Return(canonicalInstruction) instruction.EXPECT().GetPositionInOriginalScript().Maybe().Return(dummyPosition) instruction.EXPECT().String().Maybe().Return(stringifiedInstruction) diff --git a/core/server/api_container/server/startosis_engine/startosis_interpreter.go b/core/server/api_container/server/startosis_engine/startosis_interpreter.go index ca9f7e1c09..ed23c5bd73 100644 --- a/core/server/api_container/server/startosis_engine/startosis_interpreter.go +++ b/core/server/api_container/server/startosis_engine/startosis_interpreter.go @@ -90,6 +90,7 @@ func (interpreter *StartosisInterpreter) InterpretAndOptimizePlan( relativePathtoMainFile string, serializedStarlark string, serializedJsonParams string, + nonBlockingMode bool, currentEnclavePlan *enclave_plan_persistence.EnclavePlan, ) (string, *instructions_plan.InstructionsPlan, *kurtosis_core_rpc_api_bindings.StarlarkInterpretationError) { @@ -100,7 +101,7 @@ func (interpreter *StartosisInterpreter) InterpretAndOptimizePlan( // run interpretation with no mask at all to generate the list of instructions as if the enclave was empty enclaveComponents := enclave_structure.NewEnclaveComponents() emptyPlanInstructionsMask := resolver.NewInstructionsPlanMask(0) - naiveInstructionsPlanSerializedScriptOutput, naiveInstructionsPlan, interpretationErrorApi := interpreter.Interpret(ctx, packageId, mainFunctionName, packageReplaceOptions, relativePathtoMainFile, serializedStarlark, serializedJsonParams, enclaveComponents, emptyPlanInstructionsMask) + naiveInstructionsPlanSerializedScriptOutput, naiveInstructionsPlan, interpretationErrorApi := interpreter.Interpret(ctx, packageId, mainFunctionName, packageReplaceOptions, relativePathtoMainFile, serializedStarlark, serializedJsonParams, nonBlockingMode, enclaveComponents, emptyPlanInstructionsMask) if interpretationErrorApi != nil { return startosis_constants.NoOutputObject, nil, interpretationErrorApi } @@ -170,7 +171,7 @@ func (interpreter *StartosisInterpreter) InterpretAndOptimizePlan( } // Now that we have a potential plan mask, try running interpretation again using this plan mask - attemptSerializedScriptOutput, attemptInstructionsPlan, interpretationErrorApi := interpreter.Interpret(ctx, packageId, mainFunctionName, packageReplaceOptions, relativePathtoMainFile, serializedStarlark, serializedJsonParams, enclaveComponents, potentialMask) + attemptSerializedScriptOutput, attemptInstructionsPlan, interpretationErrorApi := interpreter.Interpret(ctx, packageId, mainFunctionName, packageReplaceOptions, relativePathtoMainFile, serializedStarlark, serializedJsonParams, nonBlockingMode, enclaveComponents, potentialMask) if interpretationErrorApi != nil { // Note: there's no real reason why this interpretation would fail with an error, given that the package // has been interpreted once already (right above). But to be on the safe side, check the error @@ -218,6 +219,7 @@ func (interpreter *StartosisInterpreter) Interpret( relativePathtoMainFile string, serializedStarlark string, serializedJsonParams string, + nonBlockingMode bool, enclaveComponents *enclave_structure.EnclaveComponents, instructionsPlanMask *resolver.InstructionsPlanMask, ) (string, *instructions_plan.InstructionsPlan, *kurtosis_core_rpc_api_bindings.StarlarkInterpretationError) { @@ -268,7 +270,7 @@ func (interpreter *StartosisInterpreter) Interpret( if mainFuncParamsNum >= minimumParamsRequiredForPlan { firstParamName, _ := mainFunction.Param(planParamIndex) if firstParamName == planParamName { - kurtosisPlanInstructions := KurtosisPlanInstructions(packageId, interpreter.serviceNetwork, interpreter.recipeExecutor, interpreter.packageContentProvider, packageReplaceOptions) + kurtosisPlanInstructions := KurtosisPlanInstructions(packageId, interpreter.serviceNetwork, interpreter.recipeExecutor, interpreter.packageContentProvider, packageReplaceOptions, nonBlockingMode) planModule := plan_module.PlanModule(newInstructionsPlan, enclaveComponents, interpreter.starlarkValueSerde, instructionsPlanMask, kurtosisPlanInstructions) argsTuple = append(argsTuple, planModule) } diff --git a/core/server/api_container/server/startosis_engine/startosis_interpreter_idempotent_test.go b/core/server/api_container/server/startosis_engine/startosis_interpreter_idempotent_test.go index 9509ec817a..76407536c5 100644 --- a/core/server/api_container/server/startosis_engine/startosis_interpreter_idempotent_test.go +++ b/core/server/api_container/server/startosis_engine/startosis_interpreter_idempotent_test.go @@ -28,6 +28,8 @@ const ( enclaveUuid = enclave.EnclaveUUID("enclave-uuid") noInputParams = "{}" + + defaultNonBlockingMode = false ) var noPackageReplaceOptions = map[string]string{} @@ -95,6 +97,7 @@ func (suite *StartosisInterpreterIdempotentTestSuite) TestInterpretAndOptimize_I startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, noInputParams, + defaultNonBlockingMode, enclave_structure.NewEnclaveComponents(), resolver.NewInstructionsPlanMask(0)) require.Nil(suite.T(), interpretationApiErr) @@ -110,6 +113,7 @@ func (suite *StartosisInterpreterIdempotentTestSuite) TestInterpretAndOptimize_I startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, noInputParams, + defaultNonBlockingMode, convertedEnclavePlan, ) require.Nil(suite.T(), interpretationError) @@ -150,6 +154,7 @@ func (suite *StartosisInterpreterIdempotentTestSuite) TestInterpretAndOptimize_A startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, initialScript, noInputParams, + defaultNonBlockingMode, enclave_structure.NewEnclaveComponents(), resolver.NewInstructionsPlanMask(0)) require.Nil(suite.T(), interpretationApiErr) @@ -170,6 +175,7 @@ func (suite *StartosisInterpreterIdempotentTestSuite) TestInterpretAndOptimize_A startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, updatedScript, noInputParams, + defaultNonBlockingMode, convertedEnclavePlan, ) require.Nil(suite.T(), interpretationError) @@ -211,6 +217,7 @@ func (suite *StartosisInterpreterIdempotentTestSuite) TestInterpretAndOptimize_D startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, initialScript, noInputParams, + defaultNonBlockingMode, enclave_structure.NewEnclaveComponents(), resolver.NewInstructionsPlanMask(0)) require.Nil(suite.T(), interpretationApiErr) @@ -229,6 +236,7 @@ func (suite *StartosisInterpreterIdempotentTestSuite) TestInterpretAndOptimize_D startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, updatedScript, noInputParams, + defaultNonBlockingMode, convertedEnclavePlan, ) require.Nil(suite.T(), interpretationError) @@ -264,6 +272,7 @@ func (suite *StartosisInterpreterIdempotentTestSuite) TestInterpretAndOptimize_I startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, initialScript, noInputParams, + defaultNonBlockingMode, enclave_structure.NewEnclaveComponents(), resolver.NewInstructionsPlanMask(0)) require.Nil(suite.T(), interpretationApiErr) @@ -284,6 +293,7 @@ func (suite *StartosisInterpreterIdempotentTestSuite) TestInterpretAndOptimize_I startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, updatedScript, noInputParams, + defaultNonBlockingMode, convertedEnclavePlan, ) require.Nil(suite.T(), interpretationError) @@ -325,6 +335,7 @@ func (suite *StartosisInterpreterIdempotentTestSuite) TestInterpretAndOptimize_A startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, initialScript, noInputParams, + defaultNonBlockingMode, enclave_structure.NewEnclaveComponents(), resolver.NewInstructionsPlanMask(0)) require.Nil(suite.T(), interpretationApiErr) @@ -346,6 +357,7 @@ func (suite *StartosisInterpreterIdempotentTestSuite) TestInterpretAndOptimize_A startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, updatedScript, noInputParams, + defaultNonBlockingMode, convertedEnclavePlan, ) require.Nil(suite.T(), interpretationError) @@ -396,6 +408,7 @@ func (suite *StartosisInterpreterIdempotentTestSuite) TestInterpretAndOptimize_U startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, initialScript, noInputParams, + defaultNonBlockingMode, enclave_structure.NewEnclaveComponents(), resolver.NewInstructionsPlanMask(0)) require.Nil(suite.T(), interpretationApiErr) @@ -422,6 +435,7 @@ func (suite *StartosisInterpreterIdempotentTestSuite) TestInterpretAndOptimize_U startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, updatedScript, noInputParams, + defaultNonBlockingMode, convertedEnclavePlan, ) require.Nil(suite.T(), interpretationError) diff --git a/core/server/api_container/server/startosis_engine/startosis_interpreter_test.go b/core/server/api_container/server/startosis_engine/startosis_interpreter_test.go index 5963725fe6..4f560c25b3 100644 --- a/core/server/api_container/server/startosis_engine/startosis_interpreter_test.go +++ b/core/server/api_container/server/startosis_engine/startosis_interpreter_test.go @@ -100,7 +100,7 @@ def run(plan): plan.print("` + testString + `") ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 1, instructionsPlan.Size()) // Only the print statement @@ -121,7 +121,7 @@ def deploy_contract(plan,service_name,contract_name,init_message,args): mainFunctionName := "deploy_contract" inputArgs := `{"service_name": "my-service", "contract_name": "my-contract", "init_message": "Init message", "args": {"arg1": "arg1-value", "arg2": "arg2-value"}}` - result, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, mainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, inputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + result, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, mainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, inputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 3, instructionsPlan.Size()) // The three print functions require.NotNil(suite.T(), result) @@ -142,7 +142,7 @@ def my_func(my_arg1, my_arg2, args): mainFunctionName := "my_func" inputArgs := `{"my_arg1": "foo", "my_arg2": "bar", "args": {"arg1": "arg1-value", "arg2": "arg2-value"}}` - result, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, mainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, inputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + result, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, mainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, inputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 0, instructionsPlan.Size()) // There are no instructions to execute require.NotNil(suite.T(), result) @@ -159,7 +159,7 @@ def run(plan): plan.print(my_dict) ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 2, instructionsPlan.Size()) @@ -177,7 +177,7 @@ def run(plan): unknownInstruction() ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) expectedError := startosis_errors.NewInterpretationErrorWithCustomMsg( []startosis_errors.CallFrame{ @@ -198,7 +198,7 @@ unknownVariable unknownInstruction2() ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) expectedError := startosis_errors.NewInterpretationErrorWithCustomMsg( []startosis_errors.CallFrame{ @@ -220,7 +220,7 @@ def run(): load("otherScript.start") # fails b/c load takes in at least 2 args ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) expectedError := startosis_errors.NewInterpretationErrorFromStacktrace( []startosis_errors.CallFrame{ @@ -252,7 +252,7 @@ def run(plan): plan.print("The grpc transport protocol is " + datastore_service.ports["grpc"].transport_protocol) ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, fmt.Sprintf(script, testServiceName), startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, fmt.Sprintf(script, testServiceName), startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 5, instructionsPlan.Size()) @@ -287,7 +287,7 @@ def run(plan): plan.print("The transport protocol is " + datastore_service.ports["grpc"].transport_protocol) plan.print("The application protocol is " + datastore_service.ports["grpc"].application_protocol) ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, fmt.Sprintf(script, testServiceName), startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, fmt.Sprintf(script, testServiceName), startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 6, instructionsPlan.Size()) @@ -317,7 +317,7 @@ def run(plan): plan.add_service(name = service_name, config = config) ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) expectedError := startosis_errors.NewInterpretationErrorWithCauseAndCustomMsg( errors.New("ServiceConfig: missing argument for image"), @@ -348,7 +348,7 @@ def run(plan): plan.add_service(name = service_name, config = config) ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) expectedError := startosis_errors.NewInterpretationErrorWithCauseAndCustomMsg( startosis_errors.NewInterpretationError(`The following argument(s) could not be parsed or did not pass validation: {"transport_protocol":"Invalid argument value for 'transport_protocol': 'TCPK'. Valid values are TCP, SCTP, UDP"}`), []startosis_errors.CallFrame{ @@ -378,7 +378,7 @@ def run(plan): plan.add_service(name = service_name, config = config) ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) expectedError := startosis_errors.NewInterpretationErrorWithCauseAndCustomMsg( startosis_errors.NewInterpretationError(`The following argument(s) could not be parsed or did not pass validation: {"number":"Value for 'number' was expected to be an integer between 1 and 65535, but it was 'starlark.String'"}`), []startosis_errors.CallFrame{ @@ -418,7 +418,7 @@ def run(plan): plan.print("Done!") ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 8, instructionsPlan.Size()) @@ -446,7 +446,7 @@ load("` + barModulePath + `", "a") def run(plan): plan.print("Hello " + a) ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) expectedError := startosis_errors.NewInterpretationErrorWithCustomMsg( []startosis_errors.CallFrame{ *startosis_errors.NewCallFrame("", startosis_errors.NewScriptPosition(startosis_constants.PackageIdPlaceholderForStandaloneScript, 2, 1)), @@ -469,7 +469,7 @@ my_module = import_module("` + barModulePath + `") def run(plan): plan.print("Hello " + my_module.a) ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 1, instructionsPlan.Size()) // Only the print statement @@ -493,7 +493,7 @@ def run(plan): plan.print(module_doo.b) ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 1, instructionsPlan.Size()) @@ -517,7 +517,7 @@ def run(plan): plan.print(module_doo.b) ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) expectedError := startosis_errors.NewInterpretationErrorWithCustomMsg( []startosis_errors.CallFrame{ *startosis_errors.NewCallFrame("", startosis_errors.NewScriptPosition(moduleBarLoadsModuleDoo, 1, 27)), @@ -538,7 +538,7 @@ def run(plan): plan.print(my_module.b) ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) errorMsg := `Evaluation error: An error occurred while loading the module '` + nonExistentModule + `' Caused by: Package '` + nonExistentModule + `' not found` @@ -561,7 +561,7 @@ def run(plan): ` // assert that first load fails - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.NotNil(suite.T(), interpretationError) require.Nil(suite.T(), instructionsPlan) @@ -570,7 +570,7 @@ def run(plan): expectedOutput := `Hello World! ` // assert that second load succeeds - _, instructionsPlan, interpretationError = suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError = suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 1, instructionsPlan.Size()) validateScriptOutputFromPrintInstructions(suite.T(), instructionsPlan, expectedOutput) @@ -597,7 +597,7 @@ def run(plan): plan.add_service(name = module_bar.service_name, config = module_bar.config) ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 3, instructionsPlan.Size()) @@ -641,7 +641,7 @@ def run(plan): plan.print("Done!") ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 8, instructionsPlan.Size()) @@ -670,7 +670,7 @@ def run(plan): plan.print("World!") ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 1, instructionsPlan.Size()) @@ -708,7 +708,7 @@ Adding service example-datastore-server Starting Startosis script! ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, scriptA, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, scriptA, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 4, instructionsPlan.Size()) assertInstructionTypeAndPosition(suite.T(), instructionsPlan, 2, add_service.AddServiceBuiltinName, moduleBar, 12, 18) @@ -733,7 +733,7 @@ def run(plan): Adding service example-datastore-server ` - _, instructionsPlan, interpretationError = suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, scriptB, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError = suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, scriptB, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 3, instructionsPlan.Size()) assertInstructionTypeAndPosition(suite.T(), instructionsPlan, 2, add_service.AddServiceBuiltinName, startosis_constants.PackageIdPlaceholderForStandaloneScript, 14, 18) @@ -753,7 +753,7 @@ def run(plan): plan.print(file_contents) ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 2, instructionsPlan.Size()) @@ -787,7 +787,7 @@ def run(plan): plan.print(artifact_name) ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 3, instructionsPlan.Size()) @@ -826,7 +826,7 @@ def run(plan): plan.print(uuid) ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 4, instructionsPlan.Size()) @@ -848,7 +848,7 @@ def run(plan): plan.print("The service example-datastore-server has been removed") ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 3, instructionsPlan.Size()) @@ -866,7 +866,7 @@ func (suite *StartosisInterpreterTestSuite) TestStartosisInterpreter_NoPanicIfUp def run(plan): plan.upload_files("` + filePath + `") ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.NotNil(suite.T(), interpretationError) require.Nil(suite.T(), instructionsPlan) } @@ -877,7 +877,7 @@ def run(plan): plan.print("Hello World!") ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 1, instructionsPlan.Size()) @@ -892,7 +892,7 @@ def run(plan): plan.print("Hello World!") ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, `{"number": 4}`, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, `{"number": 4}`, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.NotNil(suite.T(), interpretationError) require.Nil(suite.T(), instructionsPlan) } @@ -903,7 +903,7 @@ def run(plan, args): plan.print("My favorite number is {0}".format(args["number"])) ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, `{"number": 4}`, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, `{"number": 4}`, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 1, instructionsPlan.Size()) @@ -921,7 +921,7 @@ def run(plan, args): plan.print("Sorry no args!") ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 1, instructionsPlan.Size()) @@ -936,7 +936,7 @@ def run(plan, args, invalid_arg): plan.print("this wouldn't interpret so the text here doesnt matter") ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.NotNil(suite.T(), interpretationError) expectedError := "Evaluation error: function run missing 2 arguments (args, invalid_arg)" require.Contains(suite.T(), interpretationError.GetErrorMessage(), expectedError) @@ -950,7 +950,7 @@ def run(plan, a, b): ` missingArgumentCount := 1 missingArgument := "b" - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, `{"a": "x"}`, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, `{"a": "x"}`, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.NotNil(suite.T(), interpretationError) expectedError := fmt.Sprintf("Evaluation error: function run missing %d argument (%v)", missingArgumentCount, missingArgument) @@ -963,7 +963,7 @@ func (suite *StartosisInterpreterTestSuite) TestStartosisInterpreter_RunWithUnpa def run(plan, a, b=1): plan.print("My favorite number is {0}, but my favorite letter is {1}".format(b, a)) ` - _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, `{"a": "x"}`, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, instructionsPlan, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, `{"a": "x"}`, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) require.Equal(suite.T(), 1, instructionsPlan.Size()) expectedOutput := "My favorite number is 1, but my favorite letter is x\n" @@ -976,7 +976,7 @@ def run(plan): print("this doesnt matter") ` - _, _, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, _, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.NotNil(suite.T(), interpretationError) require.Equal(suite.T(), fmt.Sprintf("Evaluation error: %v\n\tat [3:7]: run\n\tat [0:0]: print", print_builtin.UsePlanFromKurtosisInstructionError), interpretationError.GetErrorMessage()) } @@ -987,7 +987,7 @@ def run(plan): time.now() ` - _, _, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, _, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.NotNil(suite.T(), interpretationError) require.Equal(suite.T(), fmt.Sprintf("Evaluation error: %v\n\tat [3:10]: run\n\tat [0:0]: now", time_now_builtin.UseRunPythonInsteadOfTimeNowError), interpretationError.GetErrorMessage()) } @@ -998,7 +998,7 @@ def run(plan): time.parse_duration("5s") ` - _, _, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, emptyEnclaveComponents, emptyInstructionsPlanMask) + _, _, interpretationError := suite.interpreter.Interpret(context.Background(), startosis_constants.PackageIdPlaceholderForStandaloneScript, useDefaultMainFunctionName, noPackageReplaceOptions, startosis_constants.PlaceHolderMainFileForPlaceStandAloneScript, script, startosis_constants.EmptyInputArgs, defaultNonBlockingMode, emptyEnclaveComponents, emptyInstructionsPlanMask) require.Nil(suite.T(), interpretationError) } diff --git a/core/server/api_container/server/startosis_engine/startosis_runner.go b/core/server/api_container/server/startosis_engine/startosis_runner.go index ab4c8210b0..dd13197c73 100644 --- a/core/server/api_container/server/startosis_engine/startosis_runner.go +++ b/core/server/api_container/server/startosis_engine/startosis_runner.go @@ -56,6 +56,7 @@ func (runner *StartosisRunner) Run( serializedStartosis string, serializedParams string, imageDownloadMode image_download_mode.ImageDownloadMode, + nonBlockingMode bool, experimentalFeatures []kurtosis_core_rpc_api_bindings.KurtosisFeatureFlag, ) <-chan *kurtosis_core_rpc_api_bindings.StarlarkRunResponseLine { runner.mutex.Lock() @@ -76,7 +77,6 @@ func (runner *StartosisRunner) Run( } starlarkRunResponseLines <- binding_constructors.NewStarlarkRunResponseLineFromInfoMsg("Made with Kurtosis - https://kurtosis.com") - close(starlarkRunResponseLines) }() @@ -111,6 +111,7 @@ func (runner *StartosisRunner) Run( relativePathToMainFile, serializedStartosis, serializedParams, + nonBlockingMode, enclave_structure.NewEnclaveComponents(), resolver.NewInstructionsPlanMask(0), ) @@ -123,6 +124,7 @@ func (runner *StartosisRunner) Run( relativePathToMainFile, serializedStartosis, serializedParams, + nonBlockingMode, runner.startosisExecutor.enclavePlan, ) } diff --git a/enclave-manager/web/lerna.json b/enclave-manager/web/lerna.json index 3aa2007da1..fad6d364c2 100644 --- a/enclave-manager/web/lerna.json +++ b/enclave-manager/web/lerna.json @@ -1,6 +1,6 @@ { "packages": ["packages/*"], - "version": "0.86.21", + "version": "0.86.25", "npmClient": "yarn", "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": false, diff --git a/enclave-manager/web/packages/app/package.json b/enclave-manager/web/packages/app/package.json index 24b98767b7..fe6a14d200 100644 --- a/enclave-manager/web/packages/app/package.json +++ b/enclave-manager/web/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@kurtosis/emui-app", - "version": "0.86.21", + "version": "0.86.25", "private": true, "homepage": ".", "dependencies": { @@ -10,7 +10,7 @@ "html-react-parser": "^4.2.2", "js-cookie": "^3.0.5", "kurtosis-cloud-indexer-sdk": "^0.0.2", - "kurtosis-ui-components": "0.86.21", + "kurtosis-ui-components": "0.86.25", "react-error-boundary": "^4.0.11", "react-hook-form": "^7.47.0", "react-mentions": "^4.4.10", diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/form/SelectArgumentInput.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/form/SelectArgumentInput.tsx index 7cbe07eb40..b5ff1d83dc 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/form/SelectArgumentInput.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/form/SelectArgumentInput.tsx @@ -23,7 +23,9 @@ export const SelectArgumentInput = ({ return ( ); diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisArtifactNode.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisArtifactNode.tsx index 84fb5d78b1..26b5a0de79 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisArtifactNode.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisArtifactNode.tsx @@ -1,4 +1,3 @@ -import { isDefined } from "kurtosis-ui-components"; import { memo } from "react"; import { NodeProps } from "reactflow"; import { KurtosisFormControl } from "../../form/KurtosisFormControl"; @@ -7,27 +6,11 @@ import { FileTreeArgumentInput } from "./input/FileTreeArgumentInput"; import { validateName } from "./input/validators"; import { KurtosisNode } from "./KurtosisNode"; import { KurtosisArtifactNodeData } from "./types"; -import { useVariableContext } from "./VariableContextProvider"; export const KurtosisArtifactNode = memo( ({ id, selected }: NodeProps) => { - const { data } = useVariableContext(); - const nodeData = data[id] as KurtosisArtifactNodeData; - - if (!isDefined(nodeData)) { - // Node has probably been deleted. - return null; - } - return ( - + name={"artifactName"} label={"Artifact Name"} isRequired> @@ -37,5 +20,5 @@ export const KurtosisArtifactNode = memo( ); }, - (oldProps, newProps) => oldProps.id !== newProps.id || oldProps.selected !== newProps.selected, + (oldProps, newProps) => oldProps.id === newProps.id && oldProps.selected === newProps.selected, ); diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisExecNode.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisExecNode.tsx deleted file mode 100644 index d24ff1b9f3..0000000000 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisExecNode.tsx +++ /dev/null @@ -1,105 +0,0 @@ -import { Tab, TabList, TabPanel, TabPanels, Tabs } from "@chakra-ui/react"; -import { isDefined } from "kurtosis-ui-components"; -import { memo, useMemo } from "react"; -import { NodeProps } from "reactflow"; -import { IntegerArgumentInput } from "../../form/IntegerArgumentInput"; -import { KurtosisFormControl } from "../../form/KurtosisFormControl"; -import { ListArgumentInput } from "../../form/ListArgumentInput"; -import { SelectArgumentInput, SelectOption } from "../../form/SelectArgumentInput"; -import { StringArgumentInput } from "../../form/StringArgumentInput"; -import { KurtosisFormInputProps } from "../../form/types"; -import { MentionStringArgumentInput } from "./input/MentionStringArgumentInput"; -import { validateName } from "./input/validators"; -import { KurtosisNode } from "./KurtosisNode"; -import { KurtosisExecNodeData, KurtosisServiceNodeData } from "./types"; -import { useVariableContext } from "./VariableContextProvider"; - -export const KurtosisExecNode = memo( - ({ id, selected }: NodeProps) => { - const { data, variables } = useVariableContext(); - const nodeData = data[id] as KurtosisExecNodeData; - - const serviceVariableOptions = useMemo((): SelectOption[] => { - return variables - .filter((variable) => variable.id.match(/^service\.[^.]+\.name+$/)) - .map((variable) => ({ - display: variable.displayName.replace(/service\.(.*)\.name/, "$1"), - value: `{{${variable.id}}}`, - })); - }, [variables]); - - if (!isDefined(nodeData)) { - // Node has probably been deleted. - return null; - } - - return ( - - name={"execName"} label={"Exec Name"} isRequired> - - - - - Config - Advanced - - - - {" "} - - name={"serviceName"} - label={"Service"} - helperText={"Choose which service to run this command in."} - isRequired - > - - options={serviceVariableOptions} - isRequired - size={"sm"} - placeholder={"Select a Service"} - name={`serviceName`} - /> - - name={"command"} label={"Command"} isRequired> - - - - - - name={"acceptableCodes"} - label={"Acceptable Exit Codes"} - isRequired - > - - FieldComponent={AcceptableCodeInput} - size={"sm"} - name={"acceptableCodes"} - createNewValue={() => ({ value: 0 })} - isRequired - /> - - - - - - ); - }, - (oldProps, newProps) => oldProps.id !== newProps.id || oldProps.selected !== newProps.selected, -); - -const AcceptableCodeInput = (props: KurtosisFormInputProps) => { - return ( - - {...props} - size={"sm"} - name={`${props.name as `acceptableCodes.${number}`}.value`} - /> - ); -}; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisNode.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisNode.tsx index 1a41c7334b..0ace2c38e9 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisNode.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisNode.tsx @@ -1,141 +1,231 @@ -import { Flex, IconButton, Text, useToken } from "@chakra-ui/react"; +import { Flex, Icon, IconButton, Text, useToken } from "@chakra-ui/react"; +import { isDefined } from "kurtosis-ui-components"; import { debounce } from "lodash"; -import { memo, PropsWithChildren, useEffect, useMemo } from "react"; +import { FC, memo, PropsWithChildren, useEffect, useMemo } from "react"; import { DefaultValues, FormProvider, useForm } from "react-hook-form"; -import { FiTrash } from "react-icons/fi"; +import { FiCpu, FiFile, FiTerminal, FiTrash } from "react-icons/fi"; import { RxCornerBottomRight } from "react-icons/rx"; -import { Handle, NodeResizeControl, Position, useReactFlow } from "reactflow"; +import { Handle, NodeResizeControl, Position, useReactFlow, useViewport } from "reactflow"; import { KurtosisNodeData } from "./types"; +import { getNodeName } from "./utils"; import { useVariableContext } from "./VariableContextProvider"; +const colors: Record = { + service: "blue.900", + artifact: "yellow.900", + shell: "red.900", + python: "red.900", +}; + +export const nodeIcons: Record = { + service: FiCpu, + artifact: FiFile, + shell: FiTerminal, + python: FiTerminal, +}; + +const nodeTypeReadable: Record = { + service: "Service", + artifact: "Files", + shell: "Shell execution task", + python: "Python execution task", +}; + type KurtosisNodeProps = PropsWithChildren<{ id: string; - name: string; selected: boolean; minWidth: number; maxWidth: number; - color: string; }>; export const KurtosisNode = memo( ({ id, - name, + selected, minWidth, maxWidth, children, - color, }: KurtosisNodeProps) => { - const chakraColor = useToken("colors", color); - const { data, updateData, removeData } = useVariableContext(); - const formMethods = useForm({ - defaultValues: (data[id] as DefaultValues) || {}, - mode: "onBlur", - shouldFocusError: false, - }); - - const { deleteElements, zoomOut, zoomIn } = useReactFlow(); - - const handleDeleteNode = (e: React.MouseEvent) => { - e.stopPropagation(); - e.preventDefault(); - deleteElements({ nodes: [{ id }] }); - removeData(id); - }; - - const handleChange = useMemo( - () => - debounce(async () => { - const isValid = await formMethods.trigger(); - updateData(id, { ...formMethods.getValues(), isValid }); - }, 500), - [updateData, formMethods, id], - ); + const { data } = useVariableContext(); + const nodeData = data[id] as DataType; - useEffect(() => { - const watcher = formMethods.watch(handleChange); - return () => watcher.unsubscribe(); - }, [formMethods, handleChange]); - - const handleScroll = (e: React.WheelEvent) => { - if (e.currentTarget.scrollTop === 0 && e.deltaY < 0) { - zoomIn(); - } - if ( - Math.abs(e.currentTarget.scrollHeight - e.currentTarget.clientHeight - e.currentTarget.scrollTop) <= 1 && - e.deltaY > 0 - ) { - zoomOut(); - } - }; + if (!isDefined(nodeData)) { + return null; + } return ( - - - - - - - - - - {name || Unnamed} - } - colorScheme={"red"} - variant={"ghost"} - size={"sm"} - onClick={handleDeleteNode} - /> - - - {children} - - - + + id={id} + selected={selected} + minWidth={minWidth} + maxWidth={maxWidth} + nodeData={nodeData} + > + {children} + ); }, ); + +type KurtosisNodeImplProps = KurtosisNodeProps & { nodeData: DataType }; +const KurtosisNodeImpl = ({ + id, + nodeData, + selected, + minWidth, + maxWidth, + children, +}: KurtosisNodeImplProps) => { + const { updateData, removeData } = useVariableContext(); + const color = colors[nodeData.type]; + const chakraColor = useToken("colors", color); + const name = useMemo(() => getNodeName(nodeData), [nodeData]); + const formMethods = useForm({ + defaultValues: nodeData as DefaultValues, + mode: "onBlur", + shouldFocusError: false, + }); + + const { deleteElements } = useReactFlow(); + + const handleDeleteNode = (e: React.MouseEvent) => { + e.stopPropagation(); + e.preventDefault(); + deleteElements({ nodes: [{ id }] }); + removeData(id); + }; + + const handleChange = useMemo( + () => + debounce(async () => { + const isValid = await formMethods.trigger(); + updateData(id, { ...formMethods.getValues(), isValid }); + }, 500), + [updateData, formMethods, id], + ); + + useEffect(() => { + const watcher = formMethods.watch(handleChange); + return () => watcher.unsubscribe(); + }, [formMethods, handleChange]); + + if (!isDefined(nodeData)) { + return null; + } + + return ( + + + + + + + + + {children} + + + + ); +}; + +type ZoomAwareNodeContentProps = PropsWithChildren<{ + name: string; + type: KurtosisNodeData["type"]; + onDelete: (e: React.MouseEvent) => void; +}>; + +const ZoomAwareNodeContent = ({ name, type, onDelete, children }: ZoomAwareNodeContentProps) => { + const viewport = useViewport(); + const { zoomOut, zoomIn } = useReactFlow(); + + const handleScroll = (e: React.WheelEvent) => { + if (e.currentTarget.scrollTop === 0 && e.deltaY < 0) { + zoomIn(); + } + if ( + Math.abs(e.currentTarget.scrollHeight - e.currentTarget.clientHeight - e.currentTarget.scrollTop) <= 1 && + e.deltaY > 0 + ) { + zoomOut(); + } + }; + + if (viewport.zoom < 0.4) { + return ( + + + + {name || Unnamed} + + + ); + } + + return ( + <> + + + + {name || Unnamed} + + {nodeTypeReadable[type]} + + + } + colorScheme={"red"} + variant={"ghost"} + size={"sm"} + onClick={onDelete} + /> + + + {children} + + + ); +}; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisPythonNode.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisPythonNode.tsx new file mode 100644 index 0000000000..3d3c0c01e8 --- /dev/null +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisPythonNode.tsx @@ -0,0 +1,168 @@ +import { Flex, Tab, TabList, TabPanel, TabPanels, Tabs } from "@chakra-ui/react"; +import { isDefined } from "kurtosis-ui-components"; +import { memo } from "react"; +import { NodeProps } from "reactflow"; +import { BooleanArgumentInput } from "../../form/BooleanArgumentInput"; +import { CodeEditorInput } from "../../form/CodeEditorInput"; +import { KurtosisFormControl } from "../../form/KurtosisFormControl"; +import { ListArgumentInput } from "../../form/ListArgumentInput"; +import { StringArgumentInput } from "../../form/StringArgumentInput"; +import { KurtosisFormInputProps } from "../../form/types"; +import { MentionStringArgumentInput } from "./input/MentionStringArgumentInput"; +import { MountArtifactFileInput } from "./input/MountArtifactFileInput"; +import { validateDockerLocator, validateDurationString, validateName } from "./input/validators"; +import { KurtosisNode } from "./KurtosisNode"; +import { KurtosisFileMount, KurtosisPythonNodeData } from "./types"; +import { useVariableContext } from "./VariableContextProvider"; + +export const KurtosisPythonNode = memo( + ({ id, selected }: NodeProps) => { + const { data } = useVariableContext(); + const nodeData = data[id] as KurtosisPythonNodeData; + + if (!isDefined(nodeData)) { + return null; + } + + return ( + + + name={"pythonName"} label={"Python Name"} isRequired> + + + name={"image"} label={"Container Image"}> + + + + + + Code + Packages + Arguments + Files + Advanced + + + + + name={"command"} label={"Code to run"} isRequired> + + + + + + name={"packages"} + label={"Packages"} + isRequired + helperText={"Names of packages that need to be installed prior to running this code"} + > + + FieldComponent={PackageInput} + createNewValue={() => ({ packageName: "" })} + name={"packages"} + size={"sm"} + isRequired + validate={validateName} + /> + + + + + name={"args"} + label={"Arguments"} + helperText={"Arguments to be passed to the Python script"} + > + + name={"args"} + FieldComponent={PythonArgInput} + createNewValue={() => ({ arg: "" })} + isRequired + /> + + + + + name={"files"} + label={"Input Files"} + helperText={"Choose where to mount artifacts on this execution tasks filesystem"} + > + ({ + mountPoint: "", + artifactName: "", + })} + /> + + + name={"store"} + label={"Output File/Directory"} + helperText={ + "Choose which files to expose from this execution task. You can use either an absolute path, a directory, or a glob." + } + > + + name={"store"} + placeholder={"/some/output/location"} + /> + + + + + + name={"wait_enabled"} + label={"Wait enabled"} + isRequired + helperText={"Whether kurtosis should wait a preset time for this step to complete."} + > + name={"wait_enabled"} /> + + + name={"wait"} + label={"Wait"} + isDisabled={nodeData.wait_enabled === "false"} + helperText={"Whether kurtosis should wait a preset time for this step to complete."} + > + + name={"wait"} + isDisabled={nodeData.wait_enabled === "false"} + size={"sm"} + placeholder={"180s"} + validate={nodeData.wait_enabled === "false" ? undefined : validateDurationString} + /> + + + + + + + ); + }, + (oldProps, newProps) => oldProps.id === newProps.id && oldProps.selected === newProps.selected, +); + +const PackageInput = (props: KurtosisFormInputProps) => { + return ( + + {...props} + size={"sm"} + name={`${props.name as `packages.${number}`}.packageName`} + /> + ); +}; + +const PythonArgInput = (props: KurtosisFormInputProps) => { + return ( + + {...props} + width={"400px"} + name={`${props.name as `args.${number}`}.arg`} + /> + ); +}; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisServiceNode.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisServiceNode.tsx index 5ddb6abb4b..a2bb357c29 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisServiceNode.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisServiceNode.tsx @@ -1,10 +1,13 @@ import { Flex, Tab, TabList, TabPanel, TabPanels, Tabs } from "@chakra-ui/react"; import { memo } from "react"; import { NodeProps } from "reactflow"; +import { BooleanArgumentInput } from "../../form/BooleanArgumentInput"; import { DictArgumentInput } from "../../form/DictArgumentInput"; +import { IntegerArgumentInput } from "../../form/IntegerArgumentInput"; import { KurtosisFormControl } from "../../form/KurtosisFormControl"; import { ListArgumentInput } from "../../form/ListArgumentInput"; import { StringArgumentInput } from "../../form/StringArgumentInput"; +import { KurtosisFormInputProps } from "../../form/types"; import { MentionStringArgumentInput } from "./input/MentionStringArgumentInput"; import { MountArtifactFileInput } from "./input/MountArtifactFileInput"; import { PortConfigurationField } from "./input/PortConfigurationInput"; @@ -16,16 +19,10 @@ import { useVariableContext } from "./VariableContextProvider"; export const KurtosisServiceNode = memo( ({ id, selected }: NodeProps) => { const { data } = useVariableContext(); + const nodeData = data[id] as KurtosisServiceNodeData; return ( - + name={"serviceName"} label={"Service Name"} isRequired> @@ -39,6 +36,7 @@ export const KurtosisServiceNode = memo( Environment Ports Files + Exec @@ -81,10 +79,61 @@ export const KurtosisServiceNode = memo( /> + + + + name={"execStepEnabled"} + label={"Exec step enabled"} + isRequired + helperText={"Whether kurtosis should execute a command in this service once the service is ready."} + > + name={"execStepEnabled"} /> + + + name={"execStepCommand"} + label={"Command"} + isRequired={nodeData.execStepEnabled === "true"} + isDisabled={nodeData.execStepEnabled === "false"} + > + + + + name={"execStepAcceptableCodes"} + label={"Acceptable Exit Codes"} + isDisabled={nodeData.execStepEnabled === "false"} + helperText={ + "If the executed command returns a code not on this list starlark will fail. Defaults to [0]" + } + > + + FieldComponent={AcceptableCodeInput} + size={"sm"} + name={"execStepAcceptableCodes"} + createNewValue={() => ({ value: 0 })} + disabled={nodeData.execStepEnabled === "false"} + /> + + + ); }, - (oldProps, newProps) => oldProps.id !== newProps.id || oldProps.selected !== newProps.selected, + (oldProps, newProps) => oldProps.id === newProps.id && oldProps.selected === newProps.selected, ); + +const AcceptableCodeInput = (props: KurtosisFormInputProps) => { + return ( + + {...props} + size={"sm"} + name={`${props.name as `execStepAcceptableCodes.${number}`}.value`} + /> + ); +}; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisShellNode.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisShellNode.tsx index f354bb5a6e..d77844add0 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisShellNode.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/KurtosisShellNode.tsx @@ -21,19 +21,11 @@ export const KurtosisShellNode = memo( const nodeData = data[id] as KurtosisShellNodeData; if (!isDefined(nodeData)) { - // Node has probably been deleted. return null; } return ( - + name={"shellName"} label={"Shell Name"} isRequired> @@ -58,7 +50,7 @@ export const KurtosisShellNode = memo( name={"command"} label={"Script to run"} isRequired> - + @@ -131,5 +123,5 @@ export const KurtosisShellNode = memo( ); }, - (oldProps, newProps) => oldProps.id !== newProps.id || oldProps.selected !== newProps.selected, + (oldProps, newProps) => oldProps.id === newProps.id && oldProps.selected === newProps.selected, ); diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/Visualiser.css b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/Visualiser.css new file mode 100644 index 0000000000..9fc3f98513 --- /dev/null +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/Visualiser.css @@ -0,0 +1,7 @@ +.react-flow__handle-right { + right: 50%; +} + +.react-flow__handle-left { + left: 50%; +} diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/Visualiser.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/Visualiser.tsx index ece3844b1b..3e729ef4e8 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/Visualiser.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/Visualiser.tsx @@ -1,8 +1,7 @@ -import { Box, Button, ButtonGroup, Flex } from "@chakra-ui/react"; +import { Box, Button, ButtonGroup, Flex, Icon } from "@chakra-ui/react"; import Dagre from "@dagrejs/dagre"; import { RemoveFunctions } from "kurtosis-ui-components"; import { forwardRef, useCallback, useEffect, useImperativeHandle, useRef } from "react"; -import { FiPlusCircle } from "react-icons/fi"; import { Background, BackgroundVariant, @@ -18,11 +17,13 @@ import { import { v4 as uuidv4 } from "uuid"; import { EnclaveFullInfo } from "../../../types"; import { KurtosisArtifactNode } from "./KurtosisArtifactNode"; -import { KurtosisExecNode } from "./KurtosisExecNode"; +import { nodeIcons } from "./KurtosisNode"; +import { KurtosisPythonNode } from "./KurtosisPythonNode"; import { KurtosisServiceNode } from "./KurtosisServiceNode"; import { KurtosisShellNode } from "./KurtosisShellNode"; import { generateStarlarkFromGraph, getNodeDependencies } from "./utils"; import { useVariableContext } from "./VariableContextProvider"; +import "./Visualiser.css"; const g = new Dagre.graphlib.Graph().setDefaultEdgeLabel(() => ({})); const getLayoutedElements = (nodes: Node[], edges: Edge[]) => { @@ -52,7 +53,7 @@ const nodeTypes = { serviceNode: KurtosisServiceNode, artifactNode: KurtosisArtifactNode, shellNode: KurtosisShellNode, - execNode: KurtosisExecNode, + pythonNode: KurtosisPythonNode, }; export type VisualiserImperativeAttributes = { @@ -97,6 +98,9 @@ export const Visualiser = forwardRef { + const handleAddPythonNode = () => { const id = uuidv4(); updateData(id, { - type: "exec", - execName: "", - serviceName: "", + type: "python", + pythonName: "", command: "", - acceptableCodes: [], + packages: [], + image: "", + args: [], + files: [], + store: "", + wait_enabled: "true", + wait: "", isValid: false, }); addNodes({ id, position: getNewNodePosition(), - width: 400, - style: { width: "400px" }, - type: "execNode", + width: 650, + style: { width: "650px" }, + type: "pythonNode", data: {}, }); }; @@ -181,6 +190,7 @@ export const Visualiser = forwardRef - - - - diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/input/MentionStringArgumentInput.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/input/MentionStringArgumentInput.tsx index 83db6c565c..01ea781f93 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/input/MentionStringArgumentInput.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/input/MentionStringArgumentInput.tsx @@ -37,7 +37,6 @@ export const MentionStringArgumentInput = ({ return ( { @@ -54,11 +53,12 @@ export const MentionStringArgumentInput = ({ tabIndex={tabIndex} singleLine value={field.value} + disabled={disabled} onChange={(e, newValue, newPlainTextValue, mentions) => field.onChange(newValue)} > diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/input/MountArtifactFileInput.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/input/MountArtifactFileInput.tsx index 8f0631044b..c1bfaa8b28 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/input/MountArtifactFileInput.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/input/MountArtifactFileInput.tsx @@ -10,7 +10,7 @@ export const MountArtifactFileInput = (props: KurtosisFormInputProps { return variables - .filter((variable) => variable.id.match(/^(?:artifact|shell)\.[^.]+$/)) + .filter((variable) => variable.id.match(/^(?:artifact|shell|python)\.[^.]+$/)) .map((variable) => ({ display: variable.displayName, value: `{{${variable.id}}}` })); }, [variables]); diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/types.ts b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/types.ts index b11df47b8e..611fecbc44 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/types.ts +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/types.ts @@ -22,15 +22,6 @@ export type KurtosisAcceptableCode = { value: number; }; -export type KurtosisExecNodeData = { - type: "exec"; - execName: string; - serviceName: string; - command: string; - acceptableCodes: KurtosisAcceptableCode[]; - isValid: boolean; -}; - export type KurtosisServiceNodeData = { type: "service"; serviceName: string; @@ -38,6 +29,9 @@ export type KurtosisServiceNodeData = { env: KurtosisEnvironmentVar[]; ports: KurtosisPort[]; files: KurtosisFileMount[]; + execStepEnabled: "true" | "false"; + execStepCommand: string; + execStepAcceptableCodes: KurtosisAcceptableCode[]; isValid: boolean; }; export type KurtosisArtifactNodeData = { @@ -60,8 +54,25 @@ export type KurtosisShellNodeData = { isValid: boolean; }; +export type KurtosisPythonPackage = { packageName: string }; +export type KurtosisPythonArg = { arg: string }; + +export type KurtosisPythonNodeData = { + type: "python"; + pythonName: string; + command: string; + image: string; + packages: KurtosisPythonPackage[]; + args: KurtosisPythonArg[]; + files: KurtosisFileMount[]; + store: string; + wait_enabled: "true" | "false"; + wait: string; + isValid: boolean; +}; + export type KurtosisNodeData = | KurtosisArtifactNodeData | KurtosisServiceNodeData | KurtosisShellNodeData - | KurtosisExecNodeData; + | KurtosisPythonNodeData; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/utils.ts b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/utils.ts index 87e53645a2..3812db21dd 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/utils.ts +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/enclaveBuilder/utils.ts @@ -45,8 +45,8 @@ export function getNodeName(kurtosisNodeData: KurtosisNodeData): string { if (kurtosisNodeData.type === "shell") { return kurtosisNodeData.shellName; } - if (kurtosisNodeData.type === "exec") { - return kurtosisNodeData.execName; + if (kurtosisNodeData.type === "python") { + return kurtosisNodeData.pythonName; } throw new Error(`Unknown node type.`); } @@ -59,7 +59,11 @@ function escapeString(value: string): string { return value.replaceAll(/(["\\])/g, "\\$1"); } -const variablePattern = /\{\{((?:service|artifact|shell).([^.]+)\.?.*)}}/; +function escapeTemplateString(value: string): string { + return escapeString(value).replaceAll(/{{(.*?)}}/g, "{{`{{$1}}`}}"); +} + +const variablePattern = /\{\{((?:service|artifact|shell|python).([^.]+)\.?.*?)}}/; export function getVariablesFromNodes(nodes: Record): Variable[] { return Object.entries(nodes).flatMap(([id, data]) => { if (data.type === "service") { @@ -129,6 +133,21 @@ export function getVariablesFromNodes(nodes: Record): ]; } + if (data.type === "python") { + return [ + { + id: `python.${id}`, + displayName: `python.${data.pythonName}`, + value: `${normaliseNameToStarlarkVariable(data.pythonName)}.files_artifacts[0]`, + }, + ...data.args.map((arg, i) => ({ + id: `python.${id}.args.${i}`, + displayName: `python.${data.pythonName}.args[${i}]`, + value: `"${arg.arg}"`, + })), + ]; + } + return []; }); } @@ -165,6 +184,12 @@ export function getNodeDependencies(nodes: Record): Re getDependenciesFor(id).add(fileMatches[2]); } }); + if (data.execStepEnabled === "true") { + const commandMatches = data.execStepCommand.match(variablePattern); + if (commandMatches) { + getDependenciesFor(id).add(commandMatches[2]); + } + } } if (data.type === "shell") { const nameMatches = data.shellName.match(variablePattern); @@ -184,19 +209,23 @@ export function getNodeDependencies(nodes: Record): Re } }); } - if (data.type === "exec") { - const nameMatches = data.execName.match(variablePattern); + if (data.type === "python") { + const nameMatches = data.pythonName.match(variablePattern); if (nameMatches) { getDependenciesFor(id).add(nameMatches[2]); } - const serviceMatches = data.serviceName.match(variablePattern); - if (serviceMatches) { - getDependenciesFor(id).add(serviceMatches[2]); - } - const commandMatches = data.command.match(variablePattern); - if (commandMatches) { - getDependenciesFor(id).add(commandMatches[2]); - } + data.args.forEach((arg) => { + const argMatches = arg.arg.match(variablePattern); + if (argMatches) { + getDependenciesFor(id).add(argMatches[2]); + } + }); + data.files.forEach((file) => { + const fileMatches = file.mountPoint.match(variablePattern) || file.artifactName.match(variablePattern); + if (fileMatches) { + getDependenciesFor(id).add(fileMatches[2]); + } + }); } }); return dependencies; @@ -210,17 +239,18 @@ export function generateStarlarkFromGraph( ): string { // Topological sort const sortedNodes: Node[] = []; - let remainingEdges = [...edges]; + let remainingEdges = [...edges].filter((e) => e.target !== e.source); while (remainingEdges.length > 0 || sortedNodes.length !== nodes.length) { - const nodesRemoved = nodes + const nodesToRemove = nodes .filter((node) => remainingEdges.every((edge) => edge.target !== node.id)) // eslint-disable-line no-loop-func .filter((node) => !sortedNodes.includes(node)); - if (nodesRemoved.length === 0) { + + if (nodesToRemove.length === 0) { throw new Error( "Topological sort couldn't remove nodes. This indicates a cycle has been detected. Starlark cannot be rendered.", ); } - sortedNodes.push(...nodesRemoved); + sortedNodes.push(...nodesToRemove); remainingEdges = remainingEdges.filter((edge) => sortedNodes.every((node) => edge.source !== node.id)); } const variablesById = getVariablesFromNodes(data).reduce( @@ -277,6 +307,21 @@ export function generateStarlarkFromGraph( starlark += ` },\n`; starlark += ` ),\n`; starlark += ` )\n\n`; + + if (nodeData.execStepEnabled === "true") { + const execName = `${serviceName}_exec`; + starlark += ` ${execName} = plan.exec(\n`; + starlark += ` service_name = ${interpolateValue(nodeData.serviceName)},\n`; + starlark += ` recipe = ExecRecipe(\n`; + starlark += ` command = [${nodeData.execStepCommand.split(" ").map(interpolateValue).join(", ")}],`; + starlark += ` ),\n`; + if (nodeData.execStepAcceptableCodes.length > 0) { + starlark += ` acceptable_codes = [${nodeData.execStepAcceptableCodes + .map(({ value }) => value) + .join(", ")}],\n`; + } + starlark += ` )\n\n`; + } } if (nodeData.type === "artifact") { @@ -286,7 +331,7 @@ export function generateStarlarkFromGraph( starlark += ` config = {\n`; for (const [fileName, fileText] of Object.entries(nodeData.files)) { starlark += ` "${fileName}": struct(\n`; - starlark += ` template="""${escapeString(fileText)}""",\n`; + starlark += ` template = """${escapeTemplateString(fileText)}""",\n`; starlark += ` data={},\n`; starlark += ` ),\n`; } @@ -322,15 +367,37 @@ export function generateStarlarkFromGraph( starlark += ` )\n\n`; } - if (nodeData.type === "exec") { - const execName = normaliseNameToStarlarkVariable(nodeData.execName); - starlark += ` ${execName} = plan.exec(\n`; - starlark += ` service_name = ${interpolateValue(nodeData.serviceName)},\n`; - starlark += ` recipe = ExecRecipe(\n`; - starlark += ` command = [${nodeData.command.split(" ").map(interpolateValue).join(", ")}],`; - starlark += ` ),\n`; - if (nodeData.acceptableCodes.length > 0) { - starlark += ` acceptable_codes = [${nodeData.acceptableCodes.map(({ value }) => value).join(", ")}],\n`; + if (nodeData.type === "python") { + const pythonName = normaliseNameToStarlarkVariable(nodeData.pythonName); + starlark += ` ${pythonName} = plan.run_python(\n`; + starlark += ` run = """${escapeString(nodeData.command)}""",\n`; + const image = interpolateValue(nodeData.image); + if (image !== '""') { + starlark += ` image = ${image},\n`; + } + starlark += ` packages = [\n`; + for (const { packageName } of nodeData.packages) { + starlark += ` ${interpolateValue(packageName)},\n`; + } + starlark += ` ],\n`; + starlark += ` args = [\n`; + for (const { arg } of nodeData.args) { + starlark += ` ${interpolateValue(arg)},\n`; + } + starlark += ` ],\n`; + starlark += ` files = {\n`; + for (const { mountPoint, artifactName } of nodeData.files) { + starlark += ` ${interpolateValue(mountPoint)}: ${interpolateValue(artifactName)},\n`; + } + starlark += ` },\n`; + if (nodeData.store !== "") { + starlark += ` store = [\n`; + starlark += ` StoreSpec(src = ${interpolateValue(nodeData.store)}, name="${pythonName}"),\n`; + starlark += ` ],\n`; + } + const wait = interpolateValue(nodeData.wait); + if (nodeData.wait_enabled === "false" || wait !== '""') { + starlark += ` wait=${nodeData.wait_enabled === "true" ? wait : "None"},\n`; } starlark += ` )\n\n`; } diff --git a/enclave-manager/web/packages/components/package.json b/enclave-manager/web/packages/components/package.json index df30883870..d2a402f395 100644 --- a/enclave-manager/web/packages/components/package.json +++ b/enclave-manager/web/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "kurtosis-ui-components", - "version": "0.86.21", + "version": "0.86.25", "private": false, "main": "build/index", "description": "This repo contains components used by Kurtosis UI applications.", diff --git a/engine/server/engine/server/enclave_rest_api_handler.go b/engine/server/engine/server/enclave_rest_api_handler.go index 1987c45873..14f89c5031 100644 --- a/engine/server/engine/server/enclave_rest_api_handler.go +++ b/engine/server/engine/server/enclave_rest_api_handler.go @@ -601,6 +601,7 @@ func (manager *enclaveRuntime) PostEnclavesEnclaveIdentifierStarlarkPackagesPack // RunStarlarkPackage. If the package is remote and must be cloned within the APIC, use the standalone boolean flag // clone_package below StarlarkPackageContent: nil, + NonBlockingMode: request.Body.NonBlockingMode, } ctxWithCancel, cancelCtxFunc := context.WithCancel(context.Background()) @@ -673,6 +674,7 @@ func (manager *enclaveRuntime) PostEnclavesEnclaveIdentifierStarlarkScripts(ctx CloudInstanceId: request.Body.CloudInstanceId, CloudUserId: request.Body.CloudUserId, ImageDownloadMode: utils.MapPointer(request.Body.ImageDownloadMode, to_grpc.ToGrpcImageDownloadMode), + NonBlockingMode: request.Body.NonBlockingMode, } ctxWithCancel, cancelCtxFunc := context.WithCancel(context.Background()) diff --git a/internal_testsuites/golang/testsuite/starlark_run_python_test/run_python_test.go b/internal_testsuites/golang/testsuite/starlark_run_python_test/run_python_test.go index 526ce54b9c..895c323fae 100644 --- a/internal_testsuites/golang/testsuite/starlark_run_python_test/run_python_test.go +++ b/internal_testsuites/golang/testsuite/starlark_run_python_test/run_python_test.go @@ -36,6 +36,17 @@ print(sys.argv[1]) packages = ["requests"], args = ["Kurtosis"] ) +` + runPythonWithSingleQuotesTest = "run-python-single-quote" + runPythonWithSingleQuotesScript = ` +def run(plan): + python_script = """ +print('kurtosis') + """ + + plan.run_python( + run = python_script, + ) ` ) @@ -54,3 +65,11 @@ func TestStarlark_RunPythonWithExternalPacakges(t *testing.T) { expectedOutput := "Command returned with exit code '0' and the following output:\n--------------------\n200\nKurtosis\n\n--------------------\n" require.Equal(t, expectedOutput, string(runResult.RunOutput)) } + +func TestStarlark_RunPythonWithSingleQuotes(t *testing.T) { + ctx := context.Background() + runResult, err := test_helpers.SetupSimpleEnclaveAndRunScript(t, ctx, runPythonWithSingleQuotesTest, runPythonWithSingleQuotesScript) + require.Nil(t, err) + expectedOutput := "Command returned with exit code '0' and the following output:\n--------------------\nkurtosis\n\n--------------------\n" + require.Equal(t, expectedOutput, string(runResult.RunOutput)) +} diff --git a/package-lock.json b/package-lock.json index 4d44aba012..66deac5caa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,18 @@ "requires": true, "packages": { "": { + "dependencies": { +<<<<<<< HEAD + "@connectrpc/protoc-gen-connect-es": "^1.3.0", + "openapi-typescript": "7.0.0-next.5", + "protoc-gen-ts": "^0.8.7" +======= + "@bufbuild/buf": "^1.29.0", + "@bufbuild/protobuf": "^1.7.2", + "@bufbuild/protoc-gen-es": "^1.7.2", + "openapi-typescript": "7.0.0-next.5" +>>>>>>> main + }, "devDependencies": { "@tailwindcss/typography": "^0.5.9" } @@ -21,6 +33,192 @@ "url": "https://github.com/sponsors/sindresorhus" } }, +<<<<<<< HEAD +======= + "node_modules/@bufbuild/buf": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@bufbuild/buf/-/buf-1.29.0.tgz", + "integrity": "sha512-euksXeFtvlvAV5j94LqXb69qQcJvFfo8vN1d3cx+IzhOKoipykuQQTq7mOWVo2R0kdk6yIMBLBofOYOsh0Df8g==", + "hasInstallScript": true, + "bin": { + "buf": "bin/buf", + "protoc-gen-buf-breaking": "bin/protoc-gen-buf-breaking", + "protoc-gen-buf-lint": "bin/protoc-gen-buf-lint" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@bufbuild/buf-darwin-arm64": "1.29.0", + "@bufbuild/buf-darwin-x64": "1.29.0", + "@bufbuild/buf-linux-aarch64": "1.29.0", + "@bufbuild/buf-linux-x64": "1.29.0", + "@bufbuild/buf-win32-arm64": "1.29.0", + "@bufbuild/buf-win32-x64": "1.29.0" + } + }, + "node_modules/@bufbuild/buf-darwin-arm64": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@bufbuild/buf-darwin-arm64/-/buf-darwin-arm64-1.29.0.tgz", + "integrity": "sha512-5hKxsARoY2WpWq1n5ONFqqGuauHb4yILKXCy37KRYCKiRLWmIP5yI3gWvWHKoH7sUJWTQmBqdJoCvYQr6ahQnw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@bufbuild/buf-darwin-x64": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@bufbuild/buf-darwin-x64/-/buf-darwin-x64-1.29.0.tgz", + "integrity": "sha512-wOAPxbPLBns4AHiComWtdO1sx1J1p6mDYTbqmloHuI+B5U2rDbMsoHoe4nBcoMF8+RHxoqjypha29wVo6yzbZg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@bufbuild/buf-linux-aarch64": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@bufbuild/buf-linux-aarch64/-/buf-linux-aarch64-1.29.0.tgz", + "integrity": "sha512-jLk2J/wyyM7KNJ/DkLfhy3eS2/Bdb70e/56adMkapSoLJmghnpgxW+oFznMxxQUX5I9BU5hTn1UhDFxgLwhP7g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@bufbuild/buf-linux-x64": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@bufbuild/buf-linux-x64/-/buf-linux-x64-1.29.0.tgz", + "integrity": "sha512-heLOywj3Oaoh69RnTx7tHsuz6rEnvz77bghLEOghsrjBR6Jcpcwc137EZR4kRTIWJNrE8Kmo3RVeXlv144qQIQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@bufbuild/buf-win32-arm64": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@bufbuild/buf-win32-arm64/-/buf-win32-arm64-1.29.0.tgz", + "integrity": "sha512-Eglyvr3PLqVucuHBcQ61conyBgH9BRaoLpKWcce1gYBVlxMQM1NxjVjGOWihxQ1dXXw5qZXmYfVODf3gSwPMuQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@bufbuild/buf-win32-x64": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@bufbuild/buf-win32-x64/-/buf-win32-x64-1.29.0.tgz", + "integrity": "sha512-wRk6co+nqHqEq4iLolXgej0jUVlWlTtGHjKaq54lTbKZrwxrBgql6qS06abgNPRASX0++XT9m3QRZ97qEIC/HQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, +>>>>>>> main + "node_modules/@bufbuild/protobuf": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.7.2.tgz", + "integrity": "sha512-i5GE2Dk5ekdlK1TR7SugY4LWRrKSfb5T1Qn4unpIMbfxoeGKERKQ59HG3iYewacGD10SR7UzevfPnh6my4tNmQ==" + }, +<<<<<<< HEAD +======= + "node_modules/@bufbuild/protoc-gen-es": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@bufbuild/protoc-gen-es/-/protoc-gen-es-1.7.2.tgz", + "integrity": "sha512-yiRk/T+YGmpSVvIkybCjPt+QyM/pLWMO+MAiz6auvCsiAgfXfc5nFFosD4yBYXID55M6eIkgBcity1AoJ6I30A==", + "dependencies": { + "@bufbuild/protobuf": "^1.7.2", + "@bufbuild/protoplugin": "1.7.2" + }, + "bin": { + "protoc-gen-es": "bin/protoc-gen-es" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@bufbuild/protobuf": "1.7.2" + }, + "peerDependenciesMeta": { + "@bufbuild/protobuf": { + "optional": true + } + } + }, +>>>>>>> main + "node_modules/@bufbuild/protoplugin": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@bufbuild/protoplugin/-/protoplugin-1.7.2.tgz", + "integrity": "sha512-N3QtO8XWD4F4alMtASWtxBw6BWXp4aLz7rPBXH4KTULdjpUHnq46g15TsrG0/8szZw6pIklTO3lFe14dl6ZYdA==", + "dependencies": { + "@bufbuild/protobuf": "1.7.2", + "@typescript/vfs": "^1.4.0", + "typescript": "4.5.2" + } + }, +<<<<<<< HEAD + "node_modules/@connectrpc/protoc-gen-connect-es": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@connectrpc/protoc-gen-connect-es/-/protoc-gen-connect-es-1.3.0.tgz", + "integrity": "sha512-UbQN48c0zafo5EFSsh3POIJP6ofYiAgKE1aFOZ2Er4W3flUYihydZdM6TQauPkn7jDj4w9jjLSTTZ9//ecUbPA==", + "dependencies": { + "@bufbuild/protobuf": "^1.6.0", + "@bufbuild/protoplugin": "^1.6.0" + }, + "bin": { + "protoc-gen-connect-es": "bin/protoc-gen-connect-es" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@bufbuild/protoc-gen-es": "^1.6.0", + "@connectrpc/connect": "1.3.0" + }, + "peerDependenciesMeta": { + "@bufbuild/protoc-gen-es": { + "optional": true + }, + "@connectrpc/connect": { + "optional": true + } + } + }, +======= +>>>>>>> main "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -112,6 +310,66 @@ "node": ">= 8" } }, + "node_modules/@redocly/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-9GWx27t7xWhDIR02PA18nzBdLcKQRgc46xNQvjFkrYk4UOmvKhJ/dawwiX0cCOeetN5LcaaiqQbVOWYK62SGHw==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@redocly/openapi-core": { +<<<<<<< HEAD + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.9.0.tgz", + "integrity": "sha512-n8Uye07wx5ca59HPIxmfPYFnYW/L60i2uaBnOgmDXZIxA61xVJ48YTRSaSLUluoidfy9XwNJv0XX7Mz9uNnF2w==", +======= + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.8.2.tgz", + "integrity": "sha512-VjUz3wrqcDbO1HfEB0AUzh6Y7T1jNJR4Jmgfs0ipuoipLjU5bDsdfKJGSSz2u0WpfmqklPsd11ynkgL5Y+MlCg==", +>>>>>>> main + "dependencies": { + "@redocly/ajv": "^8.11.0", + "colorette": "^1.2.0", + "js-levenshtein": "^1.1.6", + "js-yaml": "^4.1.0", + "lodash.isequal": "^4.5.0", + "minimatch": "^5.0.1", + "node-fetch": "^2.6.1", + "pluralize": "^8.0.0", + "yaml-ast-parser": "0.0.43" + }, + "engines": { + "node": ">=14.19.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@redocly/openapi-core/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@redocly/openapi-core/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@tailwindcss/typography": { "version": "0.5.9", "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.9.tgz", @@ -127,6 +385,22 @@ "tailwindcss": ">=3.0.0 || insiders" } }, + "node_modules/@typescript/vfs": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.5.0.tgz", + "integrity": "sha512-AJS307bPgbsZZ9ggCT3wwpg3VbTKMFNHfaY/uF0ahSkYYrPF2dSSKDNIDIQAHm9qJqbLvCsSJH7yN4Vs/CsMMg==", + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "engines": { + "node": ">=6" + } + }, "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", @@ -155,12 +429,15 @@ "dev": true, "peer": true }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "peer": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/binary-extensions": { "version": "2.2.0", @@ -247,6 +524,11 @@ "node": ">= 6" } }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" + }, "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -276,6 +558,22 @@ "node": ">=4" } }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -290,6 +588,11 @@ "dev": true, "peer": true }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, "node_modules/fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -506,6 +809,30 @@ "jiti": "bin/jiti.js" } }, + "node_modules/js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/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==" + }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -529,6 +856,11 @@ "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", "dev": true }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -578,6 +910,11 @@ "node": "*" } }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -609,6 +946,25 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -649,6 +1005,33 @@ "wrappy": "1" } }, + "node_modules/openapi-typescript": { + "version": "7.0.0-next.5", + "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-7.0.0-next.5.tgz", + "integrity": "sha512-zqEDw/FZkT0ndOCd8EybkDVwEYgaOh+ryWm6OCON70DmY9YqUnNSIVyRFVjN8hesa0bxOs9QOMzXAasczNdHbQ==", + "dependencies": { + "@redocly/openapi-core": "^1.4.1", + "ansi-colors": "^4.1.3", + "supports-color": "^9.4.0", + "typescript": "^5.3.2", + "yargs-parser": "^21.1.1" + }, + "bin": { + "openapi-typescript": "bin/cli.js" + } + }, + "node_modules/openapi-typescript/node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -706,6 +1089,14 @@ "node": ">= 6" } }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "engines": { + "node": ">=4" + } + }, "node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -857,6 +1248,29 @@ "dev": true, "peer": true }, +<<<<<<< HEAD + "node_modules/protoc-gen-ts": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/protoc-gen-ts/-/protoc-gen-ts-0.8.7.tgz", + "integrity": "sha512-jr4VJey2J9LVYCV7EVyVe53g1VMw28cCmYJhBe5e3YX5wiyiDwgxWxeDf9oTqAe4P1bN/YGAkW2jhlH8LohwiQ==", + "bin": { + "protoc-gen-ts": "protoc-gen-ts.js" + }, + "funding": { + "type": "individual", + "url": "https://www.buymeacoffee.com/thesayyn" + } + }, +======= +>>>>>>> main + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -901,6 +1315,14 @@ "node": ">=8.10.0" } }, + "node_modules/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==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.22.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", @@ -987,6 +1409,17 @@ "node": ">=8" } }, + "node_modules/supports-color": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -1088,6 +1521,11 @@ "node": ">=8.0" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", @@ -1095,12 +1533,46 @@ "dev": true, "peer": true }, + "node_modules/typescript": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", + "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -1117,6 +1589,19 @@ "engines": { "node": ">= 14" } + }, + "node_modules/yaml-ast-parser": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==" + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } } }, "dependencies": { @@ -1127,6 +1612,97 @@ "dev": true, "peer": true }, +<<<<<<< HEAD +======= + "@bufbuild/buf": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@bufbuild/buf/-/buf-1.29.0.tgz", + "integrity": "sha512-euksXeFtvlvAV5j94LqXb69qQcJvFfo8vN1d3cx+IzhOKoipykuQQTq7mOWVo2R0kdk6yIMBLBofOYOsh0Df8g==", + "requires": { + "@bufbuild/buf-darwin-arm64": "1.29.0", + "@bufbuild/buf-darwin-x64": "1.29.0", + "@bufbuild/buf-linux-aarch64": "1.29.0", + "@bufbuild/buf-linux-x64": "1.29.0", + "@bufbuild/buf-win32-arm64": "1.29.0", + "@bufbuild/buf-win32-x64": "1.29.0" + } + }, + "@bufbuild/buf-darwin-arm64": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@bufbuild/buf-darwin-arm64/-/buf-darwin-arm64-1.29.0.tgz", + "integrity": "sha512-5hKxsARoY2WpWq1n5ONFqqGuauHb4yILKXCy37KRYCKiRLWmIP5yI3gWvWHKoH7sUJWTQmBqdJoCvYQr6ahQnw==", + "optional": true + }, + "@bufbuild/buf-darwin-x64": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@bufbuild/buf-darwin-x64/-/buf-darwin-x64-1.29.0.tgz", + "integrity": "sha512-wOAPxbPLBns4AHiComWtdO1sx1J1p6mDYTbqmloHuI+B5U2rDbMsoHoe4nBcoMF8+RHxoqjypha29wVo6yzbZg==", + "optional": true + }, + "@bufbuild/buf-linux-aarch64": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@bufbuild/buf-linux-aarch64/-/buf-linux-aarch64-1.29.0.tgz", + "integrity": "sha512-jLk2J/wyyM7KNJ/DkLfhy3eS2/Bdb70e/56adMkapSoLJmghnpgxW+oFznMxxQUX5I9BU5hTn1UhDFxgLwhP7g==", + "optional": true + }, + "@bufbuild/buf-linux-x64": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@bufbuild/buf-linux-x64/-/buf-linux-x64-1.29.0.tgz", + "integrity": "sha512-heLOywj3Oaoh69RnTx7tHsuz6rEnvz77bghLEOghsrjBR6Jcpcwc137EZR4kRTIWJNrE8Kmo3RVeXlv144qQIQ==", + "optional": true + }, + "@bufbuild/buf-win32-arm64": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@bufbuild/buf-win32-arm64/-/buf-win32-arm64-1.29.0.tgz", + "integrity": "sha512-Eglyvr3PLqVucuHBcQ61conyBgH9BRaoLpKWcce1gYBVlxMQM1NxjVjGOWihxQ1dXXw5qZXmYfVODf3gSwPMuQ==", + "optional": true + }, + "@bufbuild/buf-win32-x64": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@bufbuild/buf-win32-x64/-/buf-win32-x64-1.29.0.tgz", + "integrity": "sha512-wRk6co+nqHqEq4iLolXgej0jUVlWlTtGHjKaq54lTbKZrwxrBgql6qS06abgNPRASX0++XT9m3QRZ97qEIC/HQ==", + "optional": true + }, +>>>>>>> main + "@bufbuild/protobuf": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.7.2.tgz", + "integrity": "sha512-i5GE2Dk5ekdlK1TR7SugY4LWRrKSfb5T1Qn4unpIMbfxoeGKERKQ59HG3iYewacGD10SR7UzevfPnh6my4tNmQ==" + }, +<<<<<<< HEAD +======= + "@bufbuild/protoc-gen-es": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@bufbuild/protoc-gen-es/-/protoc-gen-es-1.7.2.tgz", + "integrity": "sha512-yiRk/T+YGmpSVvIkybCjPt+QyM/pLWMO+MAiz6auvCsiAgfXfc5nFFosD4yBYXID55M6eIkgBcity1AoJ6I30A==", + "requires": { + "@bufbuild/protobuf": "^1.7.2", + "@bufbuild/protoplugin": "1.7.2" + } + }, +>>>>>>> main + "@bufbuild/protoplugin": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@bufbuild/protoplugin/-/protoplugin-1.7.2.tgz", + "integrity": "sha512-N3QtO8XWD4F4alMtASWtxBw6BWXp4aLz7rPBXH4KTULdjpUHnq46g15TsrG0/8szZw6pIklTO3lFe14dl6ZYdA==", + "requires": { + "@bufbuild/protobuf": "1.7.2", + "@typescript/vfs": "^1.4.0", + "typescript": "4.5.2" + } + }, +<<<<<<< HEAD + "@connectrpc/protoc-gen-connect-es": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@connectrpc/protoc-gen-connect-es/-/protoc-gen-connect-es-1.3.0.tgz", + "integrity": "sha512-UbQN48c0zafo5EFSsh3POIJP6ofYiAgKE1aFOZ2Er4W3flUYihydZdM6TQauPkn7jDj4w9jjLSTTZ9//ecUbPA==", + "requires": { + "@bufbuild/protobuf": "^1.6.0", + "@bufbuild/protoplugin": "^1.6.0" + } + }, +======= +>>>>>>> main "@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -1200,6 +1776,57 @@ "fastq": "^1.6.0" } }, + "@redocly/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-9GWx27t7xWhDIR02PA18nzBdLcKQRgc46xNQvjFkrYk4UOmvKhJ/dawwiX0cCOeetN5LcaaiqQbVOWYK62SGHw==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "@redocly/openapi-core": { +<<<<<<< HEAD + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.9.0.tgz", + "integrity": "sha512-n8Uye07wx5ca59HPIxmfPYFnYW/L60i2uaBnOgmDXZIxA61xVJ48YTRSaSLUluoidfy9XwNJv0XX7Mz9uNnF2w==", +======= + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.8.2.tgz", + "integrity": "sha512-VjUz3wrqcDbO1HfEB0AUzh6Y7T1jNJR4Jmgfs0ipuoipLjU5bDsdfKJGSSz2u0WpfmqklPsd11ynkgL5Y+MlCg==", +>>>>>>> main + "requires": { + "@redocly/ajv": "^8.11.0", + "colorette": "^1.2.0", + "js-levenshtein": "^1.1.6", + "js-yaml": "^4.1.0", + "lodash.isequal": "^4.5.0", + "minimatch": "^5.0.1", + "node-fetch": "^2.6.1", + "pluralize": "^8.0.0", + "yaml-ast-parser": "0.0.43" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "@tailwindcss/typography": { "version": "0.5.9", "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.9.tgz", @@ -1212,6 +1839,19 @@ "postcss-selector-parser": "6.0.10" } }, + "@typescript/vfs": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.5.0.tgz", + "integrity": "sha512-AJS307bPgbsZZ9ggCT3wwpg3VbTKMFNHfaY/uF0ahSkYYrPF2dSSKDNIDIQAHm9qJqbLvCsSJH7yN4Vs/CsMMg==", + "requires": { + "debug": "^4.1.1" + } + }, + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" + }, "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", @@ -1237,12 +1877,15 @@ "dev": true, "peer": true }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "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, - "peer": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "binary-extensions": { "version": "2.2.0", @@ -1308,6 +1951,11 @@ } } }, + "colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" + }, "commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -1328,6 +1976,14 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, "didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -1342,6 +1998,11 @@ "dev": true, "peer": true }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, "fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -1514,6 +2175,24 @@ "dev": true, "peer": true }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "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==" + }, "lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -1534,6 +2213,11 @@ "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", "dev": true }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -1574,6 +2258,11 @@ "brace-expansion": "^1.1.7" } }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -1593,6 +2282,14 @@ "dev": true, "peer": true }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -1624,6 +2321,25 @@ "wrappy": "1" } }, + "openapi-typescript": { + "version": "7.0.0-next.5", + "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-7.0.0-next.5.tgz", + "integrity": "sha512-zqEDw/FZkT0ndOCd8EybkDVwEYgaOh+ryWm6OCON70DmY9YqUnNSIVyRFVjN8hesa0bxOs9QOMzXAasczNdHbQ==", + "requires": { + "@redocly/openapi-core": "^1.4.1", + "ansi-colors": "^4.1.3", + "supports-color": "^9.4.0", + "typescript": "^5.3.2", + "yargs-parser": "^21.1.1" + }, + "dependencies": { + "typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==" + } + } + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -1666,6 +2382,11 @@ "dev": true, "peer": true }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==" + }, "postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -1751,6 +2472,19 @@ "dev": true, "peer": true }, +<<<<<<< HEAD + "protoc-gen-ts": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/protoc-gen-ts/-/protoc-gen-ts-0.8.7.tgz", + "integrity": "sha512-jr4VJey2J9LVYCV7EVyVe53g1VMw28cCmYJhBe5e3YX5wiyiDwgxWxeDf9oTqAe4P1bN/YGAkW2jhlH8LohwiQ==" + }, +======= +>>>>>>> main + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -1778,6 +2512,11 @@ "picomatch": "^2.2.1" } }, + "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==" + }, "resolve": { "version": "1.22.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", @@ -1830,6 +2569,11 @@ "ts-interface-checker": "^0.1.9" } }, + "supports-color": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==" + }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -1911,6 +2655,11 @@ "is-number": "^7.0.0" } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", @@ -1918,12 +2667,39 @@ "dev": true, "peer": true }, + "typescript": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", + "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==" + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -1937,6 +2713,16 @@ "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", "dev": true, "peer": true + }, + "yaml-ast-parser": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==" + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" } } } diff --git a/package.json b/package.json index 21a89ba684..19f2849beb 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,9 @@ "@tailwindcss/typography": "^0.5.9" }, "dependencies": { + "@bufbuild/buf": "^1.29.0", + "@bufbuild/protobuf": "^1.7.2", + "@bufbuild/protoc-gen-es": "^1.7.2", "openapi-typescript": "7.0.0-next.5" } } diff --git a/version.txt b/version.txt index 785922b0b8..99bbd775e0 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.86.21 +0.86.25 diff --git a/yarn.lock b/yarn.lock index 3fd25f7438..93f436f7ce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,23 +2,206 @@ # yarn lockfile v1 +"@alloc/quick-lru@^5.2.0": +<<<<<<< HEAD + version "5.2.0" + resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz" + integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== + +"@bufbuild/protobuf@^1.6.0", "@bufbuild/protobuf@1.7.2": + version "1.7.2" + resolved "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.7.2.tgz" + integrity sha512-i5GE2Dk5ekdlK1TR7SugY4LWRrKSfb5T1Qn4unpIMbfxoeGKERKQ59HG3iYewacGD10SR7UzevfPnh6my4tNmQ== + +"@bufbuild/protoplugin@^1.6.0": + version "1.7.2" + resolved "https://registry.npmjs.org/@bufbuild/protoplugin/-/protoplugin-1.7.2.tgz" + integrity sha512-N3QtO8XWD4F4alMtASWtxBw6BWXp4aLz7rPBXH4KTULdjpUHnq46g15TsrG0/8szZw6pIklTO3lFe14dl6ZYdA== + dependencies: + "@bufbuild/protobuf" "1.7.2" + "@typescript/vfs" "^1.4.0" + typescript "4.5.2" + +"@connectrpc/protoc-gen-connect-es@^1.3.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@connectrpc/protoc-gen-connect-es/-/protoc-gen-connect-es-1.3.0.tgz" + integrity sha512-UbQN48c0zafo5EFSsh3POIJP6ofYiAgKE1aFOZ2Er4W3flUYihydZdM6TQauPkn7jDj4w9jjLSTTZ9//ecUbPA== + dependencies: + "@bufbuild/protobuf" "^1.6.0" + "@bufbuild/protoplugin" "^1.6.0" + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.19" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz" + integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + "@redocly/ajv@^8.11.0": version "8.11.0" - resolved "https://registry.yarnpkg.com/@redocly/ajv/-/ajv-8.11.0.tgz#2fad322888dc0113af026e08fceb3e71aae495ae" + resolved "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.0.tgz" integrity sha512-9GWx27t7xWhDIR02PA18nzBdLcKQRgc46xNQvjFkrYk4UOmvKhJ/dawwiX0cCOeetN5LcaaiqQbVOWYK62SGHw== +======= + "integrity" "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==" + "resolved" "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz" + "version" "5.2.0" + +"@bufbuild/buf-darwin-arm64@1.29.0": + "integrity" "sha512-5hKxsARoY2WpWq1n5ONFqqGuauHb4yILKXCy37KRYCKiRLWmIP5yI3gWvWHKoH7sUJWTQmBqdJoCvYQr6ahQnw==" + "resolved" "https://registry.npmjs.org/@bufbuild/buf-darwin-arm64/-/buf-darwin-arm64-1.29.0.tgz" + "version" "1.29.0" + +"@bufbuild/buf@^1.29.0": + "integrity" "sha512-euksXeFtvlvAV5j94LqXb69qQcJvFfo8vN1d3cx+IzhOKoipykuQQTq7mOWVo2R0kdk6yIMBLBofOYOsh0Df8g==" + "resolved" "https://registry.npmjs.org/@bufbuild/buf/-/buf-1.29.0.tgz" + "version" "1.29.0" + optionalDependencies: + "@bufbuild/buf-darwin-arm64" "1.29.0" + "@bufbuild/buf-darwin-x64" "1.29.0" + "@bufbuild/buf-linux-aarch64" "1.29.0" + "@bufbuild/buf-linux-x64" "1.29.0" + "@bufbuild/buf-win32-arm64" "1.29.0" + "@bufbuild/buf-win32-x64" "1.29.0" + +"@bufbuild/protobuf@^1.7.2", "@bufbuild/protobuf@1.7.2": + "integrity" "sha512-i5GE2Dk5ekdlK1TR7SugY4LWRrKSfb5T1Qn4unpIMbfxoeGKERKQ59HG3iYewacGD10SR7UzevfPnh6my4tNmQ==" + "resolved" "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.7.2.tgz" + "version" "1.7.2" + +"@bufbuild/protoc-gen-es@^1.7.2": + "integrity" "sha512-yiRk/T+YGmpSVvIkybCjPt+QyM/pLWMO+MAiz6auvCsiAgfXfc5nFFosD4yBYXID55M6eIkgBcity1AoJ6I30A==" + "resolved" "https://registry.npmjs.org/@bufbuild/protoc-gen-es/-/protoc-gen-es-1.7.2.tgz" + "version" "1.7.2" +>>>>>>> main + dependencies: + "@bufbuild/protobuf" "^1.7.2" + "@bufbuild/protoplugin" "1.7.2" + +"@bufbuild/protoplugin@1.7.2": + "integrity" "sha512-N3QtO8XWD4F4alMtASWtxBw6BWXp4aLz7rPBXH4KTULdjpUHnq46g15TsrG0/8szZw6pIklTO3lFe14dl6ZYdA==" + "resolved" "https://registry.npmjs.org/@bufbuild/protoplugin/-/protoplugin-1.7.2.tgz" + "version" "1.7.2" + dependencies: + "@bufbuild/protobuf" "1.7.2" + "@typescript/vfs" "^1.4.0" + "typescript" "4.5.2" + +"@jridgewell/gen-mapping@^0.3.2": + "integrity" "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" + "version" "0.3.3" + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.1.0": + "integrity" "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" + "resolved" "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" + "version" "3.1.1" + +"@jridgewell/set-array@^1.0.1": + "integrity" "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "resolved" "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + "version" "1.1.2" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + "integrity" "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + "version" "1.4.15" + +"@jridgewell/trace-mapping@^0.3.9": + "integrity" "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==" + "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz" + "version" "0.3.19" + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@nodelib/fs.scandir@2.1.5": + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + "version" "2.1.5" + dependencies: + "@nodelib/fs.stat" "2.0.5" + "run-parallel" "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + "version" "2.0.5" + +"@nodelib/fs.walk@^1.2.3": + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + "version" "1.2.8" + dependencies: + "@nodelib/fs.scandir" "2.1.5" + "fastq" "^1.6.0" + +"@redocly/ajv@^8.11.0": + "integrity" "sha512-9GWx27t7xWhDIR02PA18nzBdLcKQRgc46xNQvjFkrYk4UOmvKhJ/dawwiX0cCOeetN5LcaaiqQbVOWYK62SGHw==" + "resolved" "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.0.tgz" + "version" "8.11.0" dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" + "fast-deep-equal" "^3.1.1" + "json-schema-traverse" "^1.0.0" + "require-from-string" "^2.0.2" + "uri-js" "^4.2.2" "@redocly/openapi-core@^1.4.1": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@redocly/openapi-core/-/openapi-core-1.5.0.tgz#aacdb9030a041a53e38c9b5c51b1caa25ab7957b" - integrity sha512-AnDLoDl1+a7mZO4+lx0KG8zH04BQx4ez6yh403PuNl9/0ygbicPPc9QG/y0/0OImChOA+knKLpJazNFjzhOAeg== +<<<<<<< HEAD + version "1.9.0" + resolved "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.9.0.tgz" + integrity sha512-n8Uye07wx5ca59HPIxmfPYFnYW/L60i2uaBnOgmDXZIxA61xVJ48YTRSaSLUluoidfy9XwNJv0XX7Mz9uNnF2w== dependencies: "@redocly/ajv" "^8.11.0" - "@types/node" "^14.11.8" colorette "^1.2.0" js-levenshtein "^1.1.6" js-yaml "^4.1.0" @@ -29,188 +212,1389 @@ yaml-ast-parser "0.0.43" "@tailwindcss/typography@^0.5.9": - version "0.5.10" - resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.10.tgz#2abde4c6d5c797ab49cf47610830a301de4c1e0a" - integrity sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw== + version "0.5.9" + resolved "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.9.tgz" + integrity sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg== +======= + "integrity" "sha512-VjUz3wrqcDbO1HfEB0AUzh6Y7T1jNJR4Jmgfs0ipuoipLjU5bDsdfKJGSSz2u0WpfmqklPsd11ynkgL5Y+MlCg==" + "resolved" "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.8.2.tgz" + "version" "1.8.2" + dependencies: + "@redocly/ajv" "^8.11.0" + "colorette" "^1.2.0" + "js-levenshtein" "^1.1.6" + "js-yaml" "^4.1.0" + "lodash.isequal" "^4.5.0" + "minimatch" "^5.0.1" + "node-fetch" "^2.6.1" + "pluralize" "^8.0.0" + "yaml-ast-parser" "0.0.43" + +"@tailwindcss/typography@^0.5.9": + "integrity" "sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==" + "resolved" "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.9.tgz" + "version" "0.5.9" +>>>>>>> main dependencies: - lodash.castarray "^4.4.0" - lodash.isplainobject "^4.0.6" - lodash.merge "^4.6.2" - postcss-selector-parser "6.0.10" + "lodash.castarray" "^4.4.0" + "lodash.isplainobject" "^4.0.6" + "lodash.merge" "^4.6.2" + "postcss-selector-parser" "6.0.10" -"@types/node@^14.11.8": - version "14.18.63" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.63.tgz#1788fa8da838dbb5f9ea994b834278205db6ca2b" - integrity sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ== +"@typescript/vfs@^1.4.0": +<<<<<<< HEAD + version "1.5.0" + resolved "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.5.0.tgz" + integrity sha512-AJS307bPgbsZZ9ggCT3wwpg3VbTKMFNHfaY/uF0ahSkYYrPF2dSSKDNIDIQAHm9qJqbLvCsSJH7yN4Vs/CsMMg== + dependencies: + debug "^4.1.1" ansi-colors@^4.1.3: version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== +======= + "integrity" "sha512-AJS307bPgbsZZ9ggCT3wwpg3VbTKMFNHfaY/uF0ahSkYYrPF2dSSKDNIDIQAHm9qJqbLvCsSJH7yN4Vs/CsMMg==" + "resolved" "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.5.0.tgz" + "version" "1.5.0" +>>>>>>> main dependencies: - balanced-match "^1.0.0" + "debug" "^4.1.1" + +<<<<<<< HEAD +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" colorette@^1.2.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + resolved "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz" integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + cssesc@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== +debug@^4.1.1: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + fast-deep-equal@^3.1.1: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-glob@^3.2.12: + version "3.3.1" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.1.6: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + 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@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + dependencies: + has "^1.0.3" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +jiti@^1.18.2: + version "1.19.3" + resolved "https://registry.npmjs.org/jiti/-/jiti-1.19.3.tgz" + integrity sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w== + js-levenshtein@^1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + resolved "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz" integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== +======= +"ansi-colors@^4.1.3": + "integrity" "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" + "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" + "version" "4.1.3" + +"any-promise@^1.0.0": + "integrity" "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + "resolved" "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" + "version" "1.3.0" + +"anymatch@~3.1.2": + "integrity" "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + "version" "3.1.3" +>>>>>>> main dependencies: - argparse "^2.0.1" + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" +<<<<<<< HEAD json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== +lilconfig@^2.0.5, lilconfig@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + lodash.castarray@^4.4.0: version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115" + resolved "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz" integrity sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q== lodash.isequal@^4.5.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz" integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== lodash.isplainobject@^4.0.6: version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +minimatch@^3.0.4: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + minimatch@^5.0.1: version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== +======= +"arg@^5.0.2": + "integrity" "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + "resolved" "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" + "version" "5.0.2" + +"argparse@^2.0.1": + "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + "version" "2.0.1" + +"balanced-match@^1.0.0": + "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + "version" "1.0.2" + +"binary-extensions@^2.0.0": + "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + "version" "2.2.0" + +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" +>>>>>>> main + dependencies: + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" + +<<<<<<< HEAD +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== dependencies: - brace-expansion "^2.0.1" + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== node-fetch@^2.6.1: version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== +======= +"brace-expansion@^2.0.1": + "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + "version" "2.0.1" +>>>>>>> main + dependencies: + "balanced-match" "^1.0.0" + +<<<<<<< HEAD +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: - whatwg-url "^5.0.0" + wrappy "1" openapi-typescript@7.0.0-next.5: version "7.0.0-next.5" - resolved "https://registry.yarnpkg.com/openapi-typescript/-/openapi-typescript-7.0.0-next.5.tgz#8a45091ac43e48e4e4d8a055778b0bd537520bfe" + resolved "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-7.0.0-next.5.tgz" integrity sha512-zqEDw/FZkT0ndOCd8EybkDVwEYgaOh+ryWm6OCON70DmY9YqUnNSIVyRFVjN8hesa0bxOs9QOMzXAasczNdHbQ== +======= +"braces@^3.0.2", "braces@~3.0.2": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "fill-range" "^7.0.1" + +"camelcase-css@^2.0.1": + "integrity" "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + "resolved" "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" + "version" "2.0.1" + +"chokidar@^3.5.3": + "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + "version" "3.5.3" + dependencies: + "anymatch" "~3.1.2" + "braces" "~3.0.2" + "glob-parent" "~5.1.2" + "is-binary-path" "~2.1.0" + "is-glob" "~4.0.1" + "normalize-path" "~3.0.0" + "readdirp" "~3.6.0" + optionalDependencies: + "fsevents" "~2.3.2" + +"colorette@^1.2.0": + "integrity" "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" + "resolved" "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz" + "version" "1.4.0" + +"commander@^4.0.0": + "integrity" "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + "resolved" "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" + "version" "4.1.1" + +"concat-map@0.0.1": + "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + +"cssesc@^3.0.0": + "integrity" "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + "resolved" "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + "version" "3.0.0" + +"debug@^4.1.1": + "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + "version" "4.3.4" + dependencies: + "ms" "2.1.2" + +"didyoumean@^1.2.2": + "integrity" "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + "resolved" "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" + "version" "1.2.2" + +"dlv@^1.1.3": + "integrity" "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + "resolved" "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" + "version" "1.1.3" + +"fast-deep-equal@^3.1.1": + "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + "version" "3.1.3" + +"fast-glob@^3.2.12": + "integrity" "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz" + "version" "3.3.1" + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + "glob-parent" "^5.1.2" + "merge2" "^1.3.0" + "micromatch" "^4.0.4" + +"fastq@^1.6.0": + "integrity" "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==" + "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + "version" "1.15.0" + dependencies: + "reusify" "^1.0.4" + +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" + +"fs.realpath@^1.0.0": + "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +"fsevents@~2.3.2": + "integrity" "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==" + "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + "version" "2.3.3" + +"function-bind@^1.1.1": + "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + "version" "1.1.1" + +"glob-parent@^5.1.2": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "is-glob" "^4.0.1" + +"glob-parent@^6.0.2": + "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "is-glob" "^4.0.3" + +"glob-parent@~5.1.2": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "is-glob" "^4.0.1" + +"glob@7.1.6": + "integrity" "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + "version" "7.1.6" + dependencies: + "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@^1.0.3": + "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" + "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "function-bind" "^1.1.1" + +"inflight@^1.0.4": + "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +"inherits@2": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"is-binary-path@~2.1.0": + "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" + "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "binary-extensions" "^2.0.0" + +"is-core-module@^2.13.0": + "integrity" "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==" + "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz" + "version" "2.13.0" + dependencies: + "has" "^1.0.3" + +"is-extglob@^2.1.1": + "integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" + +"is-glob@^4.0.1", "is-glob@^4.0.3", "is-glob@~4.0.1": + "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "is-extglob" "^2.1.1" + +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" + +"jiti@^1.18.2": + "integrity" "sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==" + "resolved" "https://registry.npmjs.org/jiti/-/jiti-1.19.3.tgz" + "version" "1.19.3" + +"js-levenshtein@^1.1.6": + "integrity" "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" + "resolved" "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz" + "version" "1.1.6" + +"js-yaml@^4.1.0": + "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "argparse" "^2.0.1" + +"json-schema-traverse@^1.0.0": + "integrity" "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + "version" "1.0.0" + +"lilconfig@^2.0.5", "lilconfig@^2.1.0": + "integrity" "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==" + "resolved" "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz" + "version" "2.1.0" + +"lines-and-columns@^1.1.6": + "integrity" "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + "version" "1.2.4" + +"lodash.castarray@^4.4.0": + "integrity" "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==" + "resolved" "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz" + "version" "4.4.0" + +"lodash.isequal@^4.5.0": + "integrity" "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + "resolved" "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz" + "version" "4.5.0" + +"lodash.isplainobject@^4.0.6": + "integrity" "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + "resolved" "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" + "version" "4.0.6" + +"lodash.merge@^4.6.2": + "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + "version" "4.6.2" + +"merge2@^1.3.0": + "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + "version" "1.4.1" + +"micromatch@^4.0.4", "micromatch@^4.0.5": + "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + "version" "4.0.5" + dependencies: + "braces" "^3.0.2" + "picomatch" "^2.3.1" + +"minimatch@^3.0.4": + "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "brace-expansion" "^1.1.7" + +"minimatch@^5.0.1": + "integrity" "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + "version" "5.1.6" + dependencies: + "brace-expansion" "^2.0.1" + +"ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"mz@^2.7.0": + "integrity" "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==" + "resolved" "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" + "version" "2.7.0" + dependencies: + "any-promise" "^1.0.0" + "object-assign" "^4.0.1" + "thenify-all" "^1.0.0" + +"nanoid@^3.3.6": + "integrity" "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" + "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz" + "version" "3.3.6" + +"node-fetch@^2.6.1": + "integrity" "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==" + "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" + "version" "2.7.0" + dependencies: + "whatwg-url" "^5.0.0" + +"normalize-path@^3.0.0", "normalize-path@~3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" + +"object-assign@^4.0.1": + "integrity" "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + "version" "4.1.1" + +"object-hash@^3.0.0": + "integrity" "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" + "resolved" "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz" + "version" "3.0.0" + +"once@^1.3.0": + "integrity" "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"openapi-typescript@7.0.0-next.5": + "integrity" "sha512-zqEDw/FZkT0ndOCd8EybkDVwEYgaOh+ryWm6OCON70DmY9YqUnNSIVyRFVjN8hesa0bxOs9QOMzXAasczNdHbQ==" + "resolved" "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-7.0.0-next.5.tgz" + "version" "7.0.0-next.5" +>>>>>>> main dependencies: "@redocly/openapi-core" "^1.4.1" - ansi-colors "^4.1.3" - supports-color "^9.4.0" - typescript "^5.3.2" - yargs-parser "^21.1.1" + "ansi-colors" "^4.1.3" + "supports-color" "^9.4.0" + "typescript" "^5.3.2" + "yargs-parser" "^21.1.1" + +<<<<<<< HEAD +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pirates@^4.0.1: + version "4.0.6" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== pluralize@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + resolved "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== +postcss-import@^15.1.0: + version "15.1.0" + resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz" + integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-js@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz" + integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== + dependencies: + camelcase-css "^2.0.1" + +postcss-load-config@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz" + integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== + dependencies: + lilconfig "^2.0.5" + yaml "^2.1.1" + +postcss-nested@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz" + integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== + dependencies: + postcss-selector-parser "^6.0.11" + +postcss-selector-parser@^6.0.11: + version "6.0.13" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz" + integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + postcss-selector-parser@6.0.10: version "6.0.10" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz" integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== +======= +"path-is-absolute@^1.0.0": + "integrity" "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" + +"path-parse@^1.0.7": + "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + "version" "1.0.7" + +"picocolors@^1.0.0": + "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + "version" "1.0.0" + +"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.3.1": + "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + "version" "2.3.1" + +"pify@^2.3.0": + "integrity" "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + "version" "2.3.0" + +"pirates@^4.0.1": + "integrity" "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==" + "resolved" "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" + "version" "4.0.6" + +"pluralize@^8.0.0": + "integrity" "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==" + "resolved" "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz" + "version" "8.0.0" + +"postcss-import@^15.1.0": + "integrity" "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==" + "resolved" "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz" + "version" "15.1.0" +>>>>>>> main dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" + "postcss-value-parser" "^4.0.0" + "read-cache" "^1.0.0" + "resolve" "^1.1.7" + +<<<<<<< HEAD +postcss-value-parser@^4.0.0: + version "4.2.0" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.0.0, postcss@^8.2.14, postcss@^8.4.21, postcss@^8.4.23, postcss@>=8.0.9: + version "8.4.31" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +protoc-gen-ts@^0.8.7: + version "0.8.7" + resolved "https://registry.npmjs.org/protoc-gen-ts/-/protoc-gen-ts-0.8.7.tgz" + integrity sha512-jr4VJey2J9LVYCV7EVyVe53g1VMw28cCmYJhBe5e3YX5wiyiDwgxWxeDf9oTqAe4P1bN/YGAkW2jhlH8LohwiQ== punycode@^2.1.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + 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== +resolve@^1.1.7, resolve@^1.22.2: + version "1.22.4" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz" + integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +sucrase@^3.32.0: + version "3.34.0" + resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz" + integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "7.1.6" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + supports-color@^9.4.0: version "9.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz" integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +"tailwindcss@>=3.0.0 || insiders": + version "3.3.3" + resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz" + integrity sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w== + dependencies: + "@alloc/quick-lru" "^5.2.0" + arg "^5.0.2" + chokidar "^3.5.3" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.2.12" + glob-parent "^6.0.2" + is-glob "^4.0.3" + jiti "^1.18.2" + lilconfig "^2.1.0" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.0.0" + postcss "^8.4.23" + postcss-import "^15.1.0" + postcss-js "^4.0.1" + postcss-load-config "^4.0.1" + postcss-nested "^6.0.1" + postcss-selector-parser "^6.0.11" + resolve "^1.22.2" + sucrase "^3.32.0" + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + tr46@~0.0.3: version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + typescript@^5.3.2: version "5.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz" integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== +typescript@4.5.2: + version "4.5.2" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz" + integrity sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw== + uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== +======= +"postcss-js@^4.0.1": + "integrity" "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==" + "resolved" "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz" + "version" "4.0.1" +>>>>>>> main dependencies: - punycode "^2.1.0" + "camelcase-css" "^2.0.1" +<<<<<<< HEAD util-deprecate@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== +======= +"postcss-load-config@^4.0.1": + "integrity" "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==" + "resolved" "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz" + "version" "4.0.1" +>>>>>>> main dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" + "lilconfig" "^2.0.5" + "yaml" "^2.1.1" + +<<<<<<< HEAD +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== yaml-ast-parser@0.0.43: version "0.0.43" - resolved "https://registry.yarnpkg.com/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz#e8a23e6fb4c38076ab92995c5dca33f3d3d7c9bb" + resolved "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz" integrity sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A== +yaml@^2.1.1: + version "2.3.2" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz" + integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg== + yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== +======= +"postcss-nested@^6.0.1": + "integrity" "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==" + "resolved" "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "postcss-selector-parser" "^6.0.11" + +"postcss-selector-parser@^6.0.11": + "integrity" "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==" + "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz" + "version" "6.0.13" + dependencies: + "cssesc" "^3.0.0" + "util-deprecate" "^1.0.2" + +"postcss-selector-parser@6.0.10": + "integrity" "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==" + "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz" + "version" "6.0.10" + dependencies: + "cssesc" "^3.0.0" + "util-deprecate" "^1.0.2" + +"postcss-value-parser@^4.0.0": + "integrity" "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + "version" "4.2.0" + +"postcss@^8.0.0", "postcss@^8.2.14", "postcss@^8.4.21", "postcss@^8.4.23", "postcss@>=8.0.9": + "integrity" "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==" + "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz" + "version" "8.4.31" + dependencies: + "nanoid" "^3.3.6" + "picocolors" "^1.0.0" + "source-map-js" "^1.0.2" + +"punycode@^2.1.0": + "integrity" "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + "version" "2.3.1" + +"queue-microtask@^1.2.2": + "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + "version" "1.2.3" + +"read-cache@^1.0.0": + "integrity" "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==" + "resolved" "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "pify" "^2.3.0" + +"readdirp@~3.6.0": + "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "picomatch" "^2.2.1" + +"require-from-string@^2.0.2": + "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + "version" "2.0.2" + +"resolve@^1.1.7", "resolve@^1.22.2": + "integrity" "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz" + "version" "1.22.4" + dependencies: + "is-core-module" "^2.13.0" + "path-parse" "^1.0.7" + "supports-preserve-symlinks-flag" "^1.0.0" + +"reusify@^1.0.4": + "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + "version" "1.0.4" + +"run-parallel@^1.1.9": + "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "queue-microtask" "^1.2.2" + +"source-map-js@^1.0.2": + "integrity" "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + "resolved" "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" + "version" "1.0.2" + +"sucrase@^3.32.0": + "integrity" "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==" + "resolved" "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz" + "version" "3.34.0" + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + "commander" "^4.0.0" + "glob" "7.1.6" + "lines-and-columns" "^1.1.6" + "mz" "^2.7.0" + "pirates" "^4.0.1" + "ts-interface-checker" "^0.1.9" + +"supports-color@^9.4.0": + "integrity" "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz" + "version" "9.4.0" + +"supports-preserve-symlinks-flag@^1.0.0": + "integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + "version" "1.0.0" + +"tailwindcss@>=3.0.0 || insiders": + "integrity" "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==" + "resolved" "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz" + "version" "3.3.3" + dependencies: + "@alloc/quick-lru" "^5.2.0" + "arg" "^5.0.2" + "chokidar" "^3.5.3" + "didyoumean" "^1.2.2" + "dlv" "^1.1.3" + "fast-glob" "^3.2.12" + "glob-parent" "^6.0.2" + "is-glob" "^4.0.3" + "jiti" "^1.18.2" + "lilconfig" "^2.1.0" + "micromatch" "^4.0.5" + "normalize-path" "^3.0.0" + "object-hash" "^3.0.0" + "picocolors" "^1.0.0" + "postcss" "^8.4.23" + "postcss-import" "^15.1.0" + "postcss-js" "^4.0.1" + "postcss-load-config" "^4.0.1" + "postcss-nested" "^6.0.1" + "postcss-selector-parser" "^6.0.11" + "resolve" "^1.22.2" + "sucrase" "^3.32.0" + +"thenify-all@^1.0.0": + "integrity" "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==" + "resolved" "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" + "version" "1.6.0" + dependencies: + "thenify" ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + "integrity" "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==" + "resolved" "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" + "version" "3.3.1" + dependencies: + "any-promise" "^1.0.0" + +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + +"tr46@~0.0.3": + "integrity" "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + "version" "0.0.3" + +"ts-interface-checker@^0.1.9": + "integrity" "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + "resolved" "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" + "version" "0.1.13" + +"typescript@^5.3.2": + "integrity" "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz" + "version" "5.3.3" + +"typescript@4.5.2": + "integrity" "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz" + "version" "4.5.2" + +"uri-js@^4.2.2": + "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" + "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + "version" "4.4.1" + dependencies: + "punycode" "^2.1.0" + +"util-deprecate@^1.0.2": + "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" + +"webidl-conversions@^3.0.0": + "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + "version" "3.0.1" + +"whatwg-url@^5.0.0": + "integrity" "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==" + "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "tr46" "~0.0.3" + "webidl-conversions" "^3.0.0" + +"wrappy@1": + "integrity" "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" + +"yaml-ast-parser@0.0.43": + "integrity" "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==" + "resolved" "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz" + "version" "0.0.43" + +"yaml@^2.1.1": + "integrity" "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==" + "resolved" "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz" + "version" "2.3.2" + +"yargs-parser@^21.1.1": + "integrity" "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + "version" "21.1.1" +>>>>>>> main