@blueyerobotics/protocol-definitions 3.2.0-c75f3166 → 3.2.0-d0f59472

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -136,6 +136,8 @@ export declare enum NotificationType {
136
136
  NOTIFICATION_TYPE_DVL_HIGH_TEMPERATURE_DETECTED = 31,
137
137
  /** NOTIFICATION_TYPE_DVL_THERMAL_PROTECTION_MODE_DETECTED - DVL thermal protection mode detected. */
138
138
  NOTIFICATION_TYPE_DVL_THERMAL_PROTECTION_MODE_DETECTED = 32,
139
+ /** NOTIFICATION_TYPE_VIDEO_PARTITION_NOT_MOUNTED - Video partition not mounted. */
140
+ NOTIFICATION_TYPE_VIDEO_PARTITION_NOT_MOUNTED = 33,
139
141
  UNRECOGNIZED = -1
140
142
  }
141
143
  export declare function notificationTypeFromJSON(object: any): NotificationType;
@@ -184,6 +186,8 @@ export declare enum Model {
184
186
  MODEL_X3 = 3,
185
187
  /** MODEL_X3_ULTRA - Blueye X3 Ultra. */
186
188
  MODEL_X3_ULTRA = 6,
189
+ /** MODEL_X7 - Blueye X7. */
190
+ MODEL_X7 = 7,
187
191
  /** MODEL_NEXT - Blueye ? */
188
192
  MODEL_NEXT = 5,
189
193
  UNRECOGNIZED = -1
@@ -218,11 +222,18 @@ export declare enum Resolution {
218
222
  RESOLUTION_FULLHD_1080P = 1,
219
223
  /** RESOLUTION_UHD_4K - 4K Ultra HD (3840x2160, Only supported on X3 Ultra). */
220
224
  RESOLUTION_UHD_4K = 3,
225
+ /** RESOLUTION_QHD_2K - 2K QHD (2560x1440, Only supported on X3 Ultra). */
226
+ RESOLUTION_QHD_2K = 5,
221
227
  UNRECOGNIZED = -1
222
228
  }
223
229
  export declare function resolutionFromJSON(object: any): Resolution;
224
230
  export declare function resolutionToJSON(object: Resolution): string;
225
- /** Available camera frame rates. */
231
+ /**
232
+ * Available camera frame rates.
233
+ *
234
+ * If the requested frame rate is higher than what is supported at the current resolution,
235
+ * the frame rate will be reduced while the resolution is respected.
236
+ */
226
237
  export declare enum Framerate {
227
238
  /** FRAMERATE_UNSPECIFIED - Framerate not specified. */
228
239
  FRAMERATE_UNSPECIFIED = 0,
@@ -230,6 +241,8 @@ export declare enum Framerate {
230
241
  FRAMERATE_FPS_30 = 1,
231
242
  /** FRAMERATE_FPS_25 - 25 frames per second. (Only supported on Pioneer/Pro/X1/X3) */
232
243
  FRAMERATE_FPS_25 = 2,
244
+ /** FRAMERATE_FPS_60 - 60 frames per second. (Only supported on X3 Ultra at QHD, 1080p and 720p) */
245
+ FRAMERATE_FPS_60 = 3,
233
246
  UNRECOGNIZED = -1
234
247
  }
235
248
  export declare function framerateFromJSON(object: any): Framerate;
@@ -257,6 +270,18 @@ export declare enum StreamingProtocol {
257
270
  }
258
271
  export declare function streamingProtocolFromJSON(object: any): StreamingProtocol;
259
272
  export declare function streamingProtocolToJSON(object: StreamingProtocol): string;
273
+ /** Recording video codec. */
274
+ export declare enum RecordingCodec {
275
+ /** RECORDING_CODEC_UNSPECIFIED - Use platform default (H.264). */
276
+ RECORDING_CODEC_UNSPECIFIED = 0,
277
+ /** RECORDING_CODEC_H264 - H.264/AVC codec. Wider compatibility with players/editors. */
278
+ RECORDING_CODEC_H264 = 1,
279
+ /** RECORDING_CODEC_H265 - H.265/HEVC codec. Better compression, limited compatibility. Ultra only. */
280
+ RECORDING_CODEC_H265 = 2,
281
+ UNRECOGNIZED = -1
282
+ }
283
+ export declare function recordingCodecFromJSON(object: any): RecordingCodec;
284
+ export declare function recordingCodecToJSON(object: RecordingCodec): string;
260
285
  /** Available temperature units. */
261
286
  export declare enum TemperatureUnit {
262
287
  /** TEMPERATURE_UNIT_UNSPECIFIED - Temperature unit not specified. */
@@ -323,6 +348,8 @@ export declare enum FontSize {
323
348
  FONT_SIZE_PX35 = 5,
324
349
  /** FONT_SIZE_PX40 - 40 px. */
325
350
  FONT_SIZE_PX40 = 6,
351
+ /** FONT_SIZE_PX50 - 50 px. */
352
+ FONT_SIZE_PX50 = 7,
326
353
  UNRECOGNIZED = -1
327
354
  }
328
355
  export declare function fontSizeFromJSON(object: any): FontSize;
@@ -425,6 +452,8 @@ export declare enum GuestPortDeviceID {
425
452
  GUEST_PORT_DEVICE_ID_BLUEYE_MULTIBEAM_SERVO_V2 = 46,
426
453
  /** GUEST_PORT_DEVICE_ID_CERULEAN_OMNISCAN_450_COMPACT - Cerulean Omniscan 450 Compact. */
427
454
  GUEST_PORT_DEVICE_ID_CERULEAN_OMNISCAN_450_COMPACT = 47,
455
+ /** GUEST_PORT_DEVICE_ID_BLUEYE_SCALING_LASER - Blueye Scaling Laser. */
456
+ GUEST_PORT_DEVICE_ID_BLUEYE_SCALING_LASER = 48,
428
457
  UNRECOGNIZED = -1
429
458
  }
430
459
  export declare function guestPortDeviceIDFromJSON(object: any): GuestPortDeviceID;
@@ -510,6 +539,18 @@ export declare enum MultibeamFrequencyMode {
510
539
  }
511
540
  export declare function multibeamFrequencyModeFromJSON(object: any): MultibeamFrequencyMode;
512
541
  export declare function multibeamFrequencyModeToJSON(object: MultibeamFrequencyMode): string;
542
+ /** Thermal zone identifiers. */
543
+ export declare enum ThermalZoneId {
544
+ /** THERMAL_ZONE_ID_UNSPECIFIED - Unspecified thermal zone. */
545
+ THERMAL_ZONE_ID_UNSPECIFIED = 0,
546
+ /** THERMAL_ZONE_ID_TJ - Junction temperature (Tj). */
547
+ THERMAL_ZONE_ID_TJ = 1,
548
+ /** THERMAL_ZONE_ID_CANISTER - Canister temperature. */
549
+ THERMAL_ZONE_ID_CANISTER = 2,
550
+ UNRECOGNIZED = -1
551
+ }
552
+ export declare function thermalZoneIdFromJSON(object: any): ThermalZoneId;
553
+ export declare function thermalZoneIdToJSON(object: ThermalZoneId): string;
513
554
  /**
514
555
  * Wrapper message for each entry in the drone telemetry logfile.
515
556
  *
@@ -829,7 +870,7 @@ export interface WaterTemperature {
829
870
  /** Water temperature (°C). */
830
871
  value: number;
831
872
  }
832
- /** CPU temperature. */
873
+ /** CPU temperature (deprecated, use SystemPerformanceInfo.thermal_zones instead). */
833
874
  export interface CPUTemperature {
834
875
  /** CPU temperature (°C). */
835
876
  value: number;
@@ -1402,6 +1443,31 @@ export interface TiltVelocity {
1402
1443
  /**
1403
1444
  * Information about the drone.
1404
1445
  *
1446
+ * Information about a loaded computer vision model.
1447
+ */
1448
+ export interface CvModelInfo {
1449
+ /** Human-readable model name (from model_meta.json). */
1450
+ name: string;
1451
+ /** Type of CV model. */
1452
+ type: CvModelInfo_ModelType;
1453
+ /** Whether the model is currently running. */
1454
+ running: boolean;
1455
+ /** Execution provider (e.g. "cuda", "tensorrt"). */
1456
+ device: string;
1457
+ /** Package directory name (e.g. "tinyyolov2_package"). Stable identifier. */
1458
+ packageId: string;
1459
+ /** Class names the model can detect (indexed by class_id). */
1460
+ labels: string[];
1461
+ }
1462
+ export declare enum CvModelInfo_ModelType {
1463
+ MODEL_TYPE_UNSPECIFIED = 0,
1464
+ MODEL_TYPE_DETECTION = 1,
1465
+ MODEL_TYPE_SOT = 2,
1466
+ UNRECOGNIZED = -1
1467
+ }
1468
+ export declare function cvModelInfo_ModelTypeFromJSON(object: any): CvModelInfo_ModelType;
1469
+ export declare function cvModelInfo_ModelTypeToJSON(object: CvModelInfo_ModelType): string;
1470
+ /**
1405
1471
  * This message contains serial numbers and version information for
1406
1472
  * internal components in the drone. Primarily used for diagnostics, or to
1407
1473
  * determine the origin of a logfile.
@@ -1429,6 +1495,8 @@ export interface DroneInfo {
1429
1495
  gp: GuestPortInfo | undefined;
1430
1496
  /** Type of depth sensor that is connected to the drone. */
1431
1497
  depthSensor: PressureSensorType;
1498
+ /** List of loaded computer vision models. */
1499
+ cvModels: CvModelInfo[];
1432
1500
  }
1433
1501
  /** Known error states for the drone. */
1434
1502
  export interface ErrorFlags {
@@ -1573,6 +1641,19 @@ export interface CameraParameters {
1573
1641
  framerate: Framerate;
1574
1642
  /** Which camera the parameters belong to. */
1575
1643
  camera: Camera;
1644
+ /**
1645
+ * Network MTU (Maximum Transmission Unit) size for video streaming in bytes (68..65535).
1646
+ * If 0 or unset, the system will use a default of 1400.
1647
+ * The Blueye App allows users to set values between 500 and 1460.
1648
+ */
1649
+ mtuSize: number;
1650
+ /** Recording video codec. If unset, uses platform default. */
1651
+ recordingCodec: RecordingCodec;
1652
+ /**
1653
+ * Recording bitrate in bits/sec. If 0 or unset, a default is computed based
1654
+ * on resolution, framerate, and encoding. Set explicitly to override.
1655
+ */
1656
+ recordingBitrate: number;
1576
1657
  }
1577
1658
  /**
1578
1659
  * Overlay parameters.
@@ -1938,7 +2019,7 @@ export interface PersistentStorageSettings {
1938
2019
  accCalibration: boolean;
1939
2020
  }
1940
2021
  /**
1941
- * CPU information.
2022
+ * CPU information (deprecated, use SystemPerformanceInfo instead).
1942
2023
  *
1943
2024
  * Contains information about the CPU load and memory usage of the drone.
1944
2025
  */
@@ -1954,6 +2035,119 @@ export interface CPUInfo {
1954
2035
  /** Communication queue load (0..1). */
1955
2036
  commQueueLoad: number;
1956
2037
  }
2038
+ /** Per-core CPU utilization. */
2039
+ export interface CpuCoreLoad {
2040
+ /** Core index (0-based). */
2041
+ coreIndex: number;
2042
+ /** Core load (0..1). */
2043
+ load: number;
2044
+ /** Current clock frequency (MHz). */
2045
+ frequencyMhz: number;
2046
+ }
2047
+ /** GPU utilization and status. */
2048
+ export interface GpuInfo {
2049
+ /** GPU load (0..1). */
2050
+ load: number;
2051
+ /** Current GPU clock frequency (MHz). */
2052
+ frequencyMhz: number;
2053
+ }
2054
+ /**
2055
+ * Deep Learning Accelerator (DLA) utilization.
2056
+ *
2057
+ * Jetson Orin NX has two DLA engines used for inference offload.
2058
+ */
2059
+ export interface DlaInfo {
2060
+ /** DLA engine index (0-based). */
2061
+ engineIndex: number;
2062
+ /** DLA engine load (0..1). */
2063
+ load: number;
2064
+ /** Core clock frequency (MHz). 0 when disabled. */
2065
+ frequencyMhz: number;
2066
+ /** True when the DLA engine is actively processing. */
2067
+ enabled: boolean;
2068
+ /** Falcon microcontroller clock frequency (MHz). 0 when disabled. */
2069
+ falconFrequencyMhz: number;
2070
+ }
2071
+ /** System memory information. */
2072
+ export interface MemoryInfo {
2073
+ /** Total RAM (bytes). */
2074
+ totalBytes: number;
2075
+ /** Used RAM (bytes). */
2076
+ usedBytes: number;
2077
+ /** Cached RAM (bytes). */
2078
+ cachedBytes: number;
2079
+ /** Memory bus utilization (0..1). i.MX only. */
2080
+ busLoad: number;
2081
+ }
2082
+ /** Thermal zone reading. */
2083
+ export interface ThermalZone {
2084
+ /** Thermal zone identifier. */
2085
+ zone: ThermalZoneId;
2086
+ /** Temperature (°C). */
2087
+ temperature: number;
2088
+ }
2089
+ /** Video codec engine status. */
2090
+ export interface VideoCodecInfo {
2091
+ /** Jetson only (NVENC/NVDEC/NVJPG/VIC devfreq). */
2092
+ encoderActive: boolean;
2093
+ /** Video encoder clock frequency (MHz). */
2094
+ encoderFrequencyMhz: number;
2095
+ /** Video decoder (NVDEC) is active. */
2096
+ decoderActive: boolean;
2097
+ /** Video decoder clock frequency (MHz). */
2098
+ decoderFrequencyMhz: number;
2099
+ /** JPEG engine (NVJPG) is active. */
2100
+ nvjpgActive: boolean;
2101
+ /** JPEG engine clock frequency (MHz). */
2102
+ nvjpgFrequencyMhz: number;
2103
+ /** Video Image Compositor (VIC) is active. */
2104
+ vicActive: boolean;
2105
+ /** VIC clock frequency (MHz). */
2106
+ vicFrequencyMhz: number;
2107
+ /** i.MX only (CODA VPU). */
2108
+ vpuActive: boolean;
2109
+ /** VPU AXI clock frequency (MHz). */
2110
+ vpuFrequencyMhz: number;
2111
+ /** Cumulative VPU_CODEC_IRQ count. */
2112
+ vpuCodecIrqCount: number;
2113
+ /** Cumulative VPU_JPG_IRQ count. */
2114
+ vpuJpgIrqCount: number;
2115
+ }
2116
+ /**
2117
+ * System performance information.
2118
+ *
2119
+ * Comprehensive performance metrics for the drone's compute platform.
2120
+ * Covers CPU, GPU, DLA, memory, thermals, and video codec utilization.
2121
+ * Fields not applicable to a platform are left at their zero/empty defaults.
2122
+ */
2123
+ export interface SystemPerformanceInfo {
2124
+ /** Per-core CPU utilization. */
2125
+ cpuCores: CpuCoreLoad[];
2126
+ /** Mean CPU utilization across all cores (0..1). */
2127
+ cpuUtilization: number;
2128
+ /** GPU utilization. */
2129
+ gpu: GpuInfo | undefined;
2130
+ /** DLA engine utilization (Jetson only). */
2131
+ dlaEngines: DlaInfo[];
2132
+ /** RAM usage. */
2133
+ memory: MemoryInfo | undefined;
2134
+ /** All thermal zone readings. */
2135
+ thermalZones: ThermalZone[];
2136
+ /** Video encoder/decoder status. */
2137
+ videoCodec: VideoCodecInfo | undefined;
2138
+ /** Main queue load (0..1). */
2139
+ mainQueueLoad: number;
2140
+ /** Guestport queue load (0..1). */
2141
+ guestportQueueLoad: number;
2142
+ /** Communication queue load (0..1). */
2143
+ commQueueLoad: number;
2144
+ /** Camera queue load (0..1). */
2145
+ cameraQueueLoad: number;
2146
+ /** Overlay queue load (0..1). */
2147
+ overlayQueueLoad: number;
2148
+ /** Position observer queue load (0..1). */
2149
+ positionObserverQueueLoad: number;
2150
+ }
1957
2151
  /**
1958
2152
  * Surface Unit battery information.
1959
2153
  *
@@ -1985,6 +2179,123 @@ export interface SurfaceUnitVersionInfo {
1985
2179
  /** Surface Unit firmware version (x.y.z). */
1986
2180
  version: string;
1987
2181
  }
2182
+ /**
2183
+ * Bounding box for object detection.
2184
+ *
2185
+ * Coordinates are in pixels relative to the camera image,
2186
+ * where (x, y) is the top-left corner of the bounding box.
2187
+ */
2188
+ export interface BoundingBox {
2189
+ /** Horizontal offset of the top-left corner (px). */
2190
+ x: number;
2191
+ /** Vertical offset of the top-left corner (px). */
2192
+ y: number;
2193
+ /** Width of the bounding box (px). */
2194
+ width: number;
2195
+ /** Height of the bounding box (px). */
2196
+ height: number;
2197
+ }
2198
+ /**
2199
+ * RLE-encoded binary segmentation mask relative to the bounding box.
2200
+ *
2201
+ * The mask bitmap has dimensions (mask_width x mask_height) covering the
2202
+ * detection's bounding box area. The counts field stores run-length encoded
2203
+ * data as packed uint16 little-endian: alternating background/foreground
2204
+ * pixel runs starting with background.
2205
+ */
2206
+ export interface SegmentationMask {
2207
+ /** Width of the RLE bitmap. */
2208
+ maskWidth: number;
2209
+ /** Height of the RLE bitmap. */
2210
+ maskHeight: number;
2211
+ /** RLE counts as packed uint16 little-endian. */
2212
+ counts: Uint8Array;
2213
+ }
2214
+ /** A single object detection from a computer vision model. */
2215
+ export interface ObjectDetection {
2216
+ /** Bounding box of the detected object. */
2217
+ boundingBox: BoundingBox | undefined;
2218
+ /** Detection confidence score (0..1). */
2219
+ confidence: number;
2220
+ /** Numeric class identifier from the model. */
2221
+ classId: number;
2222
+ /** Human-readable class name. */
2223
+ className: string;
2224
+ /** Unique ID for tracking the same object across frames. */
2225
+ trackingId: number;
2226
+ /** Instance segmentation mask (absent if model has no segmentation). */
2227
+ mask: SegmentationMask | undefined;
2228
+ }
2229
+ /** A list of object detections from a single model for a single video frame. */
2230
+ export interface ModelDetections {
2231
+ /** List of detections in the frame. */
2232
+ detections: ObjectDetection[];
2233
+ /** Which camera the detections are from. */
2234
+ camera: Camera;
2235
+ /** Width of the source image (px). */
2236
+ imageWidth: number;
2237
+ /** Height of the source image (px). */
2238
+ imageHeight: number;
2239
+ /** Name of the computer vision model that produced the detections. */
2240
+ modelName: string;
2241
+ }
2242
+ /** Generic filter settings. */
2243
+ export interface FilterMessage {
2244
+ /** If the filter is enabled. */
2245
+ enabled: boolean;
2246
+ /** Intensity of the filter (0..1). */
2247
+ intensity: number;
2248
+ }
2249
+ /**
2250
+ * Digital pan, tilt, and zoom state for the main camera.
2251
+ *
2252
+ * Only supported on X3 Ultra. Controls digital (not mechanical) zoom.
2253
+ */
2254
+ export interface CameraPanTiltZoom {
2255
+ /** Horizontal pan (-1.0..1.0), where 0.0 is center. */
2256
+ pan: number;
2257
+ /** Vertical tilt (-1.0..1.0), where 0.0 is center. */
2258
+ tilt: number;
2259
+ /** Zoom level (0.0..1.0), where 0.0 is no zoom and 1.0 is maximum zoom. */
2260
+ zoom: number;
2261
+ }
2262
+ /**
2263
+ * Information about the operator controlling the drone.
2264
+ *
2265
+ * Used to identify who started a dive, for reporting and when importing
2266
+ * dives to Blueye Cloud.
2267
+ */
2268
+ export interface OperatorInfo {
2269
+ /** Full name of the operator. */
2270
+ name: string;
2271
+ /** E-mail address of the operator. */
2272
+ email: string;
2273
+ }
2274
+ /** Single-object tracking (SOT) state reported by the computer vision pipeline. */
2275
+ export interface SotState {
2276
+ /** Current tracking state. */
2277
+ state: SotState_State;
2278
+ /** Current tracked bounding box (valid when TRACKING). */
2279
+ boundingBox: BoundingBox | undefined;
2280
+ /** Width of the source frame in pixels. */
2281
+ imageWidth: number;
2282
+ /** Height of the source frame in pixels. */
2283
+ imageHeight: number;
2284
+ }
2285
+ /** Current state of the SOT tracker. */
2286
+ export declare enum SotState_State {
2287
+ /** STATE_UNSPECIFIED - Unspecified state. */
2288
+ STATE_UNSPECIFIED = 0,
2289
+ /** STATE_IDLE - No target selected, waiting for a target bounding box. */
2290
+ STATE_IDLE = 1,
2291
+ /** STATE_TRACKING - Actively tracking a target. */
2292
+ STATE_TRACKING = 2,
2293
+ /** STATE_LOST - Target was lost (tracker failed to follow the object). */
2294
+ STATE_LOST = 3,
2295
+ UNRECOGNIZED = -1
2296
+ }
2297
+ export declare function sotState_StateFromJSON(object: any): SotState_State;
2298
+ export declare function sotState_StateToJSON(object: SotState_State): string;
1988
2299
  export declare const BinlogRecord: MessageFns<BinlogRecord>;
1989
2300
  export declare const LogEntry: MessageFns<LogEntry>;
1990
2301
  export declare const KernelLogEntry: MessageFns<KernelLogEntry>;
@@ -2048,6 +2359,7 @@ export declare const IperfStatus: MessageFns<IperfStatus>;
2048
2359
  export declare const NStreamers: MessageFns<NStreamers>;
2049
2360
  export declare const TiltAngle: MessageFns<TiltAngle>;
2050
2361
  export declare const TiltVelocity: MessageFns<TiltVelocity>;
2362
+ export declare const CvModelInfo: MessageFns<CvModelInfo>;
2051
2363
  export declare const DroneInfo: MessageFns<DroneInfo>;
2052
2364
  export declare const ErrorFlags: MessageFns<ErrorFlags>;
2053
2365
  export declare const CameraParameters: MessageFns<CameraParameters>;
@@ -2074,8 +2386,23 @@ export declare const MultibeamFrameOffset: MessageFns<MultibeamFrameOffset>;
2074
2386
  export declare const MutltibeamRecordingIndex: MessageFns<MutltibeamRecordingIndex>;
2075
2387
  export declare const PersistentStorageSettings: MessageFns<PersistentStorageSettings>;
2076
2388
  export declare const CPUInfo: MessageFns<CPUInfo>;
2389
+ export declare const CpuCoreLoad: MessageFns<CpuCoreLoad>;
2390
+ export declare const GpuInfo: MessageFns<GpuInfo>;
2391
+ export declare const DlaInfo: MessageFns<DlaInfo>;
2392
+ export declare const MemoryInfo: MessageFns<MemoryInfo>;
2393
+ export declare const ThermalZone: MessageFns<ThermalZone>;
2394
+ export declare const VideoCodecInfo: MessageFns<VideoCodecInfo>;
2395
+ export declare const SystemPerformanceInfo: MessageFns<SystemPerformanceInfo>;
2077
2396
  export declare const SurfaceUnitBatteryInfo: MessageFns<SurfaceUnitBatteryInfo>;
2078
2397
  export declare const SurfaceUnitVersionInfo: MessageFns<SurfaceUnitVersionInfo>;
2398
+ export declare const BoundingBox: MessageFns<BoundingBox>;
2399
+ export declare const SegmentationMask: MessageFns<SegmentationMask>;
2400
+ export declare const ObjectDetection: MessageFns<ObjectDetection>;
2401
+ export declare const ModelDetections: MessageFns<ModelDetections>;
2402
+ export declare const FilterMessage: MessageFns<FilterMessage>;
2403
+ export declare const CameraPanTiltZoom: MessageFns<CameraPanTiltZoom>;
2404
+ export declare const OperatorInfo: MessageFns<OperatorInfo>;
2405
+ export declare const SotState: MessageFns<SotState>;
2079
2406
  type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
2080
2407
  type DeepPartial<T> = T extends Builtin ? T : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
2081
2408
  [K in keyof T]?: DeepPartial<T[K]>;