camstreamerlib 4.0.0-beta.7 → 4.0.0-beta.70
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.
- package/README.md +143 -38
- package/cjs/CamOverlayAPI.d.ts +863 -27
- package/cjs/CamOverlayAPI.js +135 -92
- package/cjs/CamScripterAPI.d.ts +44 -17
- package/cjs/CamScripterAPI.js +52 -42
- package/cjs/CamStreamerAPI.d.ts +62 -14
- package/cjs/CamStreamerAPI.js +82 -39
- package/cjs/CamSwitcherAPI.d.ts +158 -43
- package/cjs/CamSwitcherAPI.js +138 -122
- package/cjs/PlaneTrackerAPI.d.ts +233 -0
- package/cjs/PlaneTrackerAPI.js +247 -0
- package/cjs/VapixAPI.d.ts +94 -42
- package/cjs/VapixAPI.js +323 -233
- package/cjs/{CreatePackage.js → bin/CreatePackage.js} +44 -18
- package/cjs/errors/errors.d.ts +61 -4
- package/cjs/errors/errors.js +134 -7
- package/cjs/index.d.ts +20 -4
- package/cjs/index.js +28 -5
- package/cjs/internal/ProxyClient.d.ts +8 -9
- package/cjs/internal/ProxyClient.js +28 -32
- package/cjs/internal/WsEvents.d.ts +37 -0
- package/cjs/{CamSwitcherEvents.js → internal/WsEvents.js} +28 -22
- package/cjs/internal/types.d.ts +47 -0
- package/cjs/internal/types.js +2 -0
- package/cjs/internal/utils.d.ts +3 -1
- package/cjs/internal/utils.js +15 -3
- package/cjs/internal/versionCompare.d.ts +2 -2
- package/cjs/node/CamOverlayDrawingAPI.d.ts +41 -0
- package/cjs/{CamOverlayDrawingAPI.js → node/CamOverlayDrawingAPI.js} +15 -14
- package/cjs/{CamOverlayPainter → node/CamOverlayPainter}/Frame.d.ts +8 -37
- package/cjs/{CamOverlayPainter → node/CamOverlayPainter}/Frame.js +33 -0
- package/cjs/{CamOverlayPainter → node/CamOverlayPainter}/Painter.d.ts +5 -21
- package/cjs/{CamOverlayPainter → node/CamOverlayPainter}/Painter.js +5 -17
- package/cjs/node/CamOverlayPainter/ResourceManager.d.ts +15 -0
- package/cjs/node/CamOverlayPainter/ResourceManager.js +72 -0
- package/cjs/node/CamScripterAPICameraEventsGenerator.d.ts +31 -0
- package/cjs/{CamScripterAPICameraEventsGenerator.js → node/CamScripterAPICameraEventsGenerator.js} +13 -13
- package/cjs/node/DefaultClient.d.ts +6 -5
- package/cjs/node/DefaultClient.js +10 -12
- package/cjs/{internal → node}/Digest.js +24 -1
- package/cjs/node/Digest.test.js +13 -0
- package/cjs/node/HttpRequestSender.d.ts +1 -0
- package/cjs/node/HttpRequestSender.js +14 -4
- package/cjs/node/HttpServer.d.ts +1 -1
- package/cjs/node/HttpServer.js +29 -6
- package/cjs/node/TimeZoneDaemon.d.ts +6 -0
- package/cjs/node/TimeZoneDaemon.js +29 -0
- package/cjs/node/VapixEvents.d.ts +16 -0
- package/cjs/{VapixEvents.js → node/VapixEvents.js} +10 -10
- package/cjs/node/WsClient.d.ts +9 -18
- package/cjs/node/WsClient.js +27 -20
- package/cjs/node/events/AxisCameraStationEvents.d.ts +12 -0
- package/cjs/node/events/AxisCameraStationEvents.js +53 -0
- package/cjs/node/events/GenetecAgent.d.ts +16 -0
- package/cjs/node/events/GenetecAgent.js +124 -0
- package/cjs/node/index.d.ts +18 -2
- package/cjs/node/index.js +39 -5
- package/cjs/types/CamOverlayAPI/CamOverlayAPI.d.ts +4330 -0
- package/cjs/types/CamOverlayAPI/CamOverlayAPI.js +92 -0
- package/cjs/types/CamOverlayAPI/accuweatherSchema.d.ts +84 -0
- package/cjs/types/CamOverlayAPI/accuweatherSchema.js +47 -0
- package/cjs/types/CamOverlayAPI/customGraphicsSchema.d.ts +700 -0
- package/cjs/types/CamOverlayAPI/customGraphicsSchema.js +72 -0
- package/cjs/types/CamOverlayAPI/imagesSchema.d.ts +95 -0
- package/cjs/types/CamOverlayAPI/imagesSchema.js +9 -0
- package/cjs/types/CamOverlayAPI/index.d.ts +11 -0
- package/cjs/types/CamOverlayAPI/index.js +27 -0
- package/cjs/types/CamOverlayAPI/infotickerSchema.d.ts +96 -0
- package/cjs/types/CamOverlayAPI/infotickerSchema.js +26 -0
- package/cjs/types/CamOverlayAPI/pipSchema.d.ts +125 -0
- package/cjs/types/CamOverlayAPI/pipSchema.js +39 -0
- package/cjs/types/CamOverlayAPI/ptzCompassSchema.d.ts +96 -0
- package/cjs/types/CamOverlayAPI/ptzCompassSchema.js +26 -0
- package/cjs/types/CamOverlayAPI/ptzSchema.d.ts +118 -0
- package/cjs/types/CamOverlayAPI/ptzSchema.js +12 -0
- package/cjs/types/CamOverlayAPI/scoreBoardSchema.d.ts +357 -0
- package/cjs/types/CamOverlayAPI/scoreBoardSchema.js +132 -0
- package/cjs/types/CamOverlayAPI/screenSharingSchema.d.ts +58 -0
- package/cjs/types/CamOverlayAPI/screenSharingSchema.js +8 -0
- package/cjs/types/CamOverlayAPI/serviceCommonTypes.d.ts +145 -0
- package/cjs/types/CamOverlayAPI/serviceCommonTypes.js +91 -0
- package/cjs/types/CamOverlayAPI/webCameraSharingSchema.d.ts +58 -0
- package/cjs/types/CamOverlayAPI/webCameraSharingSchema.js +8 -0
- package/cjs/types/CamOverlayDrawingAPI.d.ts +48 -0
- package/cjs/types/CamOverlayDrawingAPI.js +2 -0
- package/cjs/types/CamOverlayPainter.d.ts +76 -0
- package/cjs/types/CamOverlayPainter.js +14 -0
- package/cjs/types/CamScripterAPI.d.ts +86 -23
- package/cjs/types/CamScripterAPI.js +24 -8
- package/cjs/types/CamScripterAPICameraEventsGenerator.d.ts +45 -0
- package/cjs/types/CamScripterAPICameraEventsGenerator.js +2 -0
- package/cjs/types/CamStreamerAPI.d.ts +180 -47
- package/cjs/types/CamStreamerAPI.js +34 -3
- package/cjs/types/CamSwitcherAPI.d.ts +145 -66
- package/cjs/types/CamSwitcherAPI.js +38 -1
- package/cjs/{events → types}/GenetecAgent.d.ts +47 -47
- package/cjs/types/GenetecAgent.js +31 -0
- package/cjs/types/PlaneTrackerAPI.d.ts +952 -0
- package/cjs/types/PlaneTrackerAPI.js +320 -0
- package/cjs/types/VapixAPI.d.ts +254 -164
- package/cjs/types/VapixAPI.js +66 -11
- package/cjs/types/VapixEvents.d.ts +15 -0
- package/cjs/types/VapixEvents.js +2 -0
- package/cjs/types/common.d.ts +17 -5
- package/cjs/types/common.js +4 -2
- package/cjs/types/ws/CamOverlayEvents.d.ts +88 -0
- package/cjs/types/ws/CamOverlayEvents.js +19 -0
- package/cjs/types/ws/CamStreamerEvents.d.ts +249 -0
- package/cjs/types/ws/CamStreamerEvents.js +32 -0
- package/cjs/types/ws/PlaneTrackerEvents.d.ts +1637 -0
- package/cjs/types/ws/PlaneTrackerEvents.js +196 -0
- package/cjs/web/DefaultClient.d.ts +7 -5
- package/cjs/web/DefaultClient.js +26 -10
- package/cjs/web/WsClient.d.ts +9 -5
- package/cjs/web/WsClient.js +16 -18
- package/cjs/ws/CamOverlayEvents.d.ts +8 -0
- package/cjs/ws/CamOverlayEvents.js +24 -0
- package/cjs/ws/CamStreamerEvents.d.ts +8 -0
- package/cjs/ws/CamStreamerEvents.js +24 -0
- package/cjs/ws/CamSwitcherEvents.d.ts +8 -0
- package/cjs/ws/CamSwitcherEvents.js +24 -0
- package/cjs/ws/PlaneTrackerEvents.d.ts +9 -0
- package/cjs/ws/PlaneTrackerEvents.js +30 -0
- package/esm/CamOverlayAPI.js +135 -92
- package/esm/CamScripterAPI.js +50 -40
- package/esm/CamStreamerAPI.js +81 -39
- package/esm/CamSwitcherAPI.js +136 -120
- package/esm/PlaneTrackerAPI.js +243 -0
- package/esm/VapixAPI.js +323 -233
- package/esm/{CreatePackage.js → bin/CreatePackage.js} +16 -16
- package/esm/errors/errors.js +116 -6
- package/esm/index.js +20 -4
- package/esm/internal/ProxyClient.js +28 -32
- package/esm/{CamSwitcherEvents.js → internal/WsEvents.js} +26 -20
- package/esm/internal/types.js +1 -0
- package/esm/internal/utils.js +11 -1
- package/esm/{CamOverlayDrawingAPI.js → node/CamOverlayDrawingAPI.js} +13 -12
- package/esm/{CamOverlayPainter → node/CamOverlayPainter}/Frame.js +33 -0
- package/esm/{CamOverlayPainter → node/CamOverlayPainter}/Painter.js +2 -13
- package/esm/{CamOverlayPainter → node/CamOverlayPainter}/ResourceManager.js +7 -5
- package/esm/{CamScripterAPICameraEventsGenerator.js → node/CamScripterAPICameraEventsGenerator.js} +11 -11
- package/esm/node/DefaultClient.js +10 -12
- package/esm/node/Digest.test.js +11 -0
- package/esm/node/HttpRequestSender.js +14 -4
- package/esm/node/HttpServer.js +1 -1
- package/esm/node/TimeZoneDaemon.js +25 -0
- package/esm/{VapixEvents.js → node/VapixEvents.js} +10 -10
- package/esm/node/WsClient.js +22 -15
- package/esm/{events → node/events}/AxisCameraStationEvents.js +18 -13
- package/esm/node/events/GenetecAgent.js +120 -0
- package/esm/node/index.js +18 -2
- package/esm/types/CamOverlayAPI/CamOverlayAPI.js +76 -0
- package/esm/types/CamOverlayAPI/accuweatherSchema.js +44 -0
- package/esm/types/CamOverlayAPI/customGraphicsSchema.js +69 -0
- package/esm/types/CamOverlayAPI/imagesSchema.js +6 -0
- package/esm/types/CamOverlayAPI/index.js +11 -0
- package/esm/types/CamOverlayAPI/infotickerSchema.js +23 -0
- package/esm/types/CamOverlayAPI/pipSchema.js +36 -0
- package/esm/types/CamOverlayAPI/ptzCompassSchema.js +23 -0
- package/esm/types/CamOverlayAPI/ptzSchema.js +9 -0
- package/esm/types/CamOverlayAPI/scoreBoardSchema.js +129 -0
- package/esm/types/CamOverlayAPI/screenSharingSchema.js +5 -0
- package/esm/types/CamOverlayAPI/serviceCommonTypes.js +88 -0
- package/esm/types/CamOverlayAPI/webCameraSharingSchema.js +5 -0
- package/esm/types/CamOverlayDrawingAPI.js +1 -0
- package/esm/types/CamOverlayPainter.js +11 -0
- package/esm/types/CamScripterAPI.js +23 -7
- package/esm/types/CamScripterAPICameraEventsGenerator.js +1 -0
- package/esm/types/CamStreamerAPI.js +33 -2
- package/esm/types/CamSwitcherAPI.js +38 -1
- package/esm/types/GenetecAgent.js +28 -0
- package/esm/types/PlaneTrackerAPI.js +317 -0
- package/esm/types/VapixAPI.js +65 -10
- package/esm/types/VapixEvents.js +1 -0
- package/esm/types/common.js +3 -1
- package/esm/types/ws/CamOverlayEvents.js +16 -0
- package/esm/types/ws/CamStreamerEvents.js +29 -0
- package/esm/types/ws/PlaneTrackerEvents.js +193 -0
- package/esm/web/DefaultClient.js +26 -10
- package/esm/web/WsClient.js +16 -18
- package/esm/ws/CamOverlayEvents.js +20 -0
- package/esm/ws/CamStreamerEvents.js +20 -0
- package/esm/ws/CamSwitcherEvents.js +20 -0
- package/esm/ws/PlaneTrackerEvents.js +26 -0
- package/package.json +44 -11
- package/types/CamOverlayAPI.d.ts +867 -0
- package/types/CamScripterAPI.d.ts +46 -0
- package/types/CamStreamerAPI.d.ts +64 -0
- package/types/CamSwitcherAPI.d.ts +167 -0
- package/types/PlaneTrackerAPI.d.ts +233 -0
- package/types/VapixAPI.d.ts +118 -0
- package/types/bin/CreatePackage.d.ts +1 -0
- package/types/errors/errors.d.ts +91 -0
- package/types/index.d.ts +27 -0
- package/types/internal/ProxyClient.d.ts +10 -0
- package/types/internal/WsEvents.d.ts +37 -0
- package/types/internal/types.d.ts +47 -0
- package/{esm → types}/internal/utils.d.ts +3 -1
- package/{esm → types}/internal/versionCompare.d.ts +2 -2
- package/types/node/CamOverlayDrawingAPI.d.ts +41 -0
- package/{esm → types/node}/CamOverlayPainter/Frame.d.ts +8 -37
- package/{esm → types/node}/CamOverlayPainter/Painter.d.ts +5 -21
- package/types/node/CamOverlayPainter/ResourceManager.d.ts +15 -0
- package/types/node/CamScripterAPICameraEventsGenerator.d.ts +31 -0
- package/types/node/DefaultClient.d.ts +16 -0
- package/types/node/Digest.test.d.ts +1 -0
- package/{esm → types}/node/HttpRequestSender.d.ts +1 -0
- package/{esm → types}/node/HttpServer.d.ts +1 -1
- package/types/node/TimeZoneDaemon.d.ts +6 -0
- package/types/node/VapixEvents.d.ts +16 -0
- package/types/node/WsClient.d.ts +30 -0
- package/types/node/events/AxisCameraStationEvents.d.ts +12 -0
- package/types/node/events/GenetecAgent.d.ts +16 -0
- package/types/node/index.d.ts +18 -0
- package/types/types/CamOverlayAPI/CamOverlayAPI.d.ts +4330 -0
- package/types/types/CamOverlayAPI/accuweatherSchema.d.ts +84 -0
- package/types/types/CamOverlayAPI/customGraphicsSchema.d.ts +700 -0
- package/types/types/CamOverlayAPI/imagesSchema.d.ts +95 -0
- package/types/types/CamOverlayAPI/index.d.ts +11 -0
- package/types/types/CamOverlayAPI/infotickerSchema.d.ts +96 -0
- package/types/types/CamOverlayAPI/pipSchema.d.ts +125 -0
- package/types/types/CamOverlayAPI/ptzCompassSchema.d.ts +96 -0
- package/types/types/CamOverlayAPI/ptzSchema.d.ts +118 -0
- package/types/types/CamOverlayAPI/scoreBoardSchema.d.ts +357 -0
- package/types/types/CamOverlayAPI/screenSharingSchema.d.ts +58 -0
- package/types/types/CamOverlayAPI/serviceCommonTypes.d.ts +145 -0
- package/types/types/CamOverlayAPI/webCameraSharingSchema.d.ts +58 -0
- package/types/types/CamOverlayDrawingAPI.d.ts +48 -0
- package/types/types/CamOverlayPainter.d.ts +76 -0
- package/types/types/CamScripterAPI.d.ts +130 -0
- package/types/types/CamScripterAPICameraEventsGenerator.d.ts +45 -0
- package/types/types/CamStreamerAPI.d.ts +272 -0
- package/{esm → types}/types/CamSwitcherAPI.d.ts +145 -66
- package/{esm/events → types/types}/GenetecAgent.d.ts +47 -47
- package/types/types/PlaneTrackerAPI.d.ts +952 -0
- package/{esm → types}/types/VapixAPI.d.ts +254 -164
- package/types/types/VapixEvents.d.ts +15 -0
- package/{esm → types}/types/common.d.ts +17 -5
- package/types/types/ws/CamOverlayEvents.d.ts +88 -0
- package/types/types/ws/CamStreamerEvents.d.ts +249 -0
- package/types/types/ws/PlaneTrackerEvents.d.ts +1637 -0
- package/types/web/DefaultClient.d.ts +8 -0
- package/types/web/WsClient.d.ts +17 -0
- package/types/ws/CamOverlayEvents.d.ts +8 -0
- package/types/ws/CamStreamerEvents.d.ts +8 -0
- package/types/ws/CamSwitcherEvents.d.ts +8 -0
- package/types/ws/PlaneTrackerEvents.d.ts +9 -0
- package/cjs/CamOverlayDrawingAPI.d.ts +0 -86
- package/cjs/CamOverlayPainter/ResourceManager.d.ts +0 -14
- package/cjs/CamOverlayPainter/ResourceManager.js +0 -46
- package/cjs/CamScripterAPICameraEventsGenerator.d.ts +0 -74
- package/cjs/CamSwitcherEvents.d.ts +0 -18
- package/cjs/VapixEvents.d.ts +0 -43
- package/cjs/events/AxisCameraStationEvents.d.ts +0 -9
- package/cjs/events/AxisCameraStationEvents.js +0 -48
- package/cjs/events/GenetecAgent.js +0 -123
- package/cjs/internal/common.d.ts +0 -39
- package/cjs/internal/common.js +0 -27
- package/cjs/node/WsEventClient.d.ts +0 -13
- package/cjs/node/WsEventClient.js +0 -22
- package/cjs/types/CamOverlayAPI.d.ts +0 -188
- package/cjs/types/CamOverlayAPI.js +0 -47
- package/esm/CamOverlayAPI.d.ts +0 -31
- package/esm/CamOverlayDrawingAPI.d.ts +0 -86
- package/esm/CamOverlayPainter/ResourceManager.d.ts +0 -14
- package/esm/CamScripterAPI.d.ts +0 -19
- package/esm/CamScripterAPICameraEventsGenerator.d.ts +0 -74
- package/esm/CamStreamerAPI.d.ts +0 -16
- package/esm/CamSwitcherAPI.d.ts +0 -52
- package/esm/CamSwitcherEvents.d.ts +0 -18
- package/esm/VapixAPI.d.ts +0 -66
- package/esm/VapixEvents.d.ts +0 -43
- package/esm/errors/errors.d.ts +0 -34
- package/esm/events/AxisCameraStationEvents.d.ts +0 -9
- package/esm/events/GenetecAgent.js +0 -119
- package/esm/index.d.ts +0 -11
- package/esm/internal/ProxyClient.d.ts +0 -11
- package/esm/internal/common.d.ts +0 -39
- package/esm/internal/common.js +0 -20
- package/esm/node/DefaultClient.d.ts +0 -15
- package/esm/node/WsClient.d.ts +0 -39
- package/esm/node/WsEventClient.d.ts +0 -13
- package/esm/node/WsEventClient.js +0 -18
- package/esm/types/CamOverlayAPI.d.ts +0 -188
- package/esm/types/CamOverlayAPI.js +0 -44
- package/esm/types/CamScripterAPI.d.ts +0 -67
- package/esm/types/CamStreamerAPI.d.ts +0 -139
- package/esm/web/DefaultClient.d.ts +0 -6
- package/esm/web/WsClient.d.ts +0 -13
- package/esm/web/index.d.ts +0 -2
- /package/cjs/{CreatePackage.d.ts → bin/CreatePackage.d.ts} +0 -0
- /package/cjs/{internal → node}/Digest.d.ts +0 -0
- /package/{esm/CreatePackage.d.ts → cjs/node/Digest.test.d.ts} +0 -0
- /package/cjs/types/{CamSwitcherEvents.d.ts → ws/CamSwitcherEvents.d.ts} +0 -0
- /package/cjs/types/{CamSwitcherEvents.js → ws/CamSwitcherEvents.js} +0 -0
- /package/esm/{internal → node}/Digest.js +0 -0
- /package/esm/types/{CamSwitcherEvents.js → ws/CamSwitcherEvents.js} +0 -0
- /package/{esm → types}/internal/constants.d.ts +0 -0
- /package/{esm → types}/internal/transformers.d.ts +0 -0
- /package/{esm/internal → types/node}/Digest.d.ts +0 -0
- /package/{esm/types → types/types/ws}/CamSwitcherEvents.d.ts +0 -0
- /package/{esm/node → types/web}/index.d.ts +0 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { serviceNames, fontSchema, languageSchema, weatherUnitSchema, serviceCommonSchema } from './serviceCommonTypes';
|
|
3
|
+
export const infoTickerSchema = serviceCommonSchema.extend({
|
|
4
|
+
name: z.literal(serviceNames.infoticker),
|
|
5
|
+
showClock: z.union([z.literal(0), z.literal(1)]),
|
|
6
|
+
clockType: z.union([z.literal('12h'), z.literal('24h')]),
|
|
7
|
+
textColor: z.string(),
|
|
8
|
+
bgColor: z.string(),
|
|
9
|
+
weatherLocation: z.string(),
|
|
10
|
+
weatherLocationName: z.string(),
|
|
11
|
+
weatherLang: languageSchema,
|
|
12
|
+
weatherUnits: weatherUnitSchema,
|
|
13
|
+
numberOfLines: z.number().positive(),
|
|
14
|
+
switchingTime: z.number().nonnegative(),
|
|
15
|
+
crawlLeft: z.boolean(),
|
|
16
|
+
crawlSpeed: z.number(),
|
|
17
|
+
coordSystem: z.union([z.literal('top'), z.literal('bottom')]),
|
|
18
|
+
pos_y: z.number(),
|
|
19
|
+
font: fontSchema,
|
|
20
|
+
fontSize: z.number().nonnegative(),
|
|
21
|
+
sourceType: z.union([z.literal('text'), z.literal('url')]),
|
|
22
|
+
source: z.string(),
|
|
23
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { serviceNames, coordinateSystemSchema, serviceCommonSchema } from './serviceCommonTypes';
|
|
3
|
+
export const pipSchema = serviceCommonSchema.extend({
|
|
4
|
+
name: z.literal(serviceNames.pip),
|
|
5
|
+
coordSystem: coordinateSystemSchema,
|
|
6
|
+
pos_x: z.number(),
|
|
7
|
+
pos_y: z.number(),
|
|
8
|
+
fps: z.number(),
|
|
9
|
+
compression: z.number().nonnegative(),
|
|
10
|
+
screenSize: z.number().nonnegative(),
|
|
11
|
+
source_type: z.union([z.literal('axis_camera'), z.literal('mjpeg_url')]),
|
|
12
|
+
mjpeg_url: z.union([z.string().url(), z.literal('')]),
|
|
13
|
+
camera_ip: z.union([z.string().ip(), z.literal('')]),
|
|
14
|
+
camera_port: z.number().nonnegative(),
|
|
15
|
+
camera_user: z.string(),
|
|
16
|
+
camera_pass: z.string(),
|
|
17
|
+
camera_width: z.number().nonnegative(),
|
|
18
|
+
camera_height: z.number().nonnegative(),
|
|
19
|
+
camera_view_area: z.string(),
|
|
20
|
+
camera_overlay_params: z.union([
|
|
21
|
+
z.literal('overlays=off'),
|
|
22
|
+
z.literal('overlays=all'),
|
|
23
|
+
z.literal('overlays=text'),
|
|
24
|
+
z.literal('overlays=image'),
|
|
25
|
+
z.literal('overlays=application'),
|
|
26
|
+
]),
|
|
27
|
+
rotate: z.union([z.literal(0), z.literal(90), z.literal(180), z.literal(270)]).default(0),
|
|
28
|
+
dewarping: z.object({
|
|
29
|
+
enabled: z.boolean(),
|
|
30
|
+
rectangle: z.array(z.tuple([z.number(), z.number()])),
|
|
31
|
+
aspectRatioCorrection: z.number(),
|
|
32
|
+
}),
|
|
33
|
+
borderColor: z.string(),
|
|
34
|
+
borderWidth: z.number(),
|
|
35
|
+
scale: z.number(),
|
|
36
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { serviceNames, coordinateSystemSchema, serviceCommonSchema } from './serviceCommonTypes';
|
|
3
|
+
export const ptzCompassSchema = serviceCommonSchema.extend({
|
|
4
|
+
name: z.literal(serviceNames.ptzCompass),
|
|
5
|
+
pos_x: z.number(),
|
|
6
|
+
pos_y: z.number(),
|
|
7
|
+
coordSystem: coordinateSystemSchema,
|
|
8
|
+
scale: z.number().nonnegative(),
|
|
9
|
+
type: z.union([z.literal('compass'), z.literal('map'), z.literal('image')]),
|
|
10
|
+
image: z.union([z.string().url(), z.literal('')]),
|
|
11
|
+
northPan: z.number(),
|
|
12
|
+
cameraPosX: z.number(),
|
|
13
|
+
cameraPosY: z.number(),
|
|
14
|
+
colorScheme: z.enum(['black', 'white', 'orange']),
|
|
15
|
+
generalLng: z.number().optional(),
|
|
16
|
+
generalLat: z.number().optional(),
|
|
17
|
+
generalZoom: z.number().nonnegative().optional(),
|
|
18
|
+
generalMapType: z.string().optional(),
|
|
19
|
+
generalIframeWidth: z.number().optional(),
|
|
20
|
+
generalIframeHeight: z.number().optional(),
|
|
21
|
+
generalAddress: z.string().optional(),
|
|
22
|
+
showDegrees: z.boolean().default(false),
|
|
23
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { serviceNames, overlaySchema, serviceCommonSchema } from './serviceCommonTypes';
|
|
3
|
+
export const ptzSchema = serviceCommonSchema.extend({
|
|
4
|
+
name: z.literal(serviceNames.ptz),
|
|
5
|
+
ptz_positions: z.record(z.string(), z.object({
|
|
6
|
+
overlayList: z.array(overlaySchema.omit({ active: true, fps: true })),
|
|
7
|
+
loop: z.boolean(),
|
|
8
|
+
})),
|
|
9
|
+
});
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { coordinateSystemSchema, serviceNames } from './serviceCommonTypes';
|
|
3
|
+
export const sportFontSchema = z.union([
|
|
4
|
+
z.literal('classic'),
|
|
5
|
+
z.custom((val) => {
|
|
6
|
+
return typeof val === 'string';
|
|
7
|
+
}),
|
|
8
|
+
]);
|
|
9
|
+
export const scoreBoardSchema = z.object({
|
|
10
|
+
id: z.number().nonnegative(),
|
|
11
|
+
enabled: z.union([z.literal(0), z.literal(1)]),
|
|
12
|
+
schedule: z.string().optional(),
|
|
13
|
+
cameraList: z.array(z.number()),
|
|
14
|
+
zIndex: z.number().nonnegative(),
|
|
15
|
+
name: z.literal(serviceNames.scoreBoard),
|
|
16
|
+
pos_x: z.number(),
|
|
17
|
+
pos_y: z.number(),
|
|
18
|
+
coordSystem: coordinateSystemSchema,
|
|
19
|
+
width: z.number(),
|
|
20
|
+
height: z.number(),
|
|
21
|
+
scale: z.number(),
|
|
22
|
+
teamHomeShortname: z.string(),
|
|
23
|
+
teamGuestShortname: z.string(),
|
|
24
|
+
teamHomeBackgroundColor: z.string(),
|
|
25
|
+
teamGuestBackgroundColor: z.string(),
|
|
26
|
+
teamHomeTextColor: z.string(),
|
|
27
|
+
teamGuestTextColor: z.string(),
|
|
28
|
+
teamHomeImgPath: z.string(),
|
|
29
|
+
teamGuestImgPath: z.string(),
|
|
30
|
+
teamHomeCurrentScore: z.number(),
|
|
31
|
+
teamGuestCurrentScore: z.number(),
|
|
32
|
+
baseTimeTimestamp: z.number(),
|
|
33
|
+
baseTimePlaytime: z.number(),
|
|
34
|
+
currentPeriodPlaytime: z.number(),
|
|
35
|
+
timeIsRunning: z.boolean(),
|
|
36
|
+
currentPeriodLength: z.number(),
|
|
37
|
+
currentPeriod: z.number(),
|
|
38
|
+
font: sportFontSchema.default('classic'),
|
|
39
|
+
});
|
|
40
|
+
export const baseballScoreBoardSchema = z.object({
|
|
41
|
+
id: z.number().nonnegative(),
|
|
42
|
+
enabled: z.union([z.literal(0), z.literal(1)]),
|
|
43
|
+
schedule: z.string().optional(),
|
|
44
|
+
cameraList: z.array(z.number()),
|
|
45
|
+
zIndex: z.number().nonnegative(),
|
|
46
|
+
name: z.literal(serviceNames.baseballScoreBoard),
|
|
47
|
+
pos_x: z.number(),
|
|
48
|
+
pos_y: z.number(),
|
|
49
|
+
coordSystem: coordinateSystemSchema,
|
|
50
|
+
width: z.number(),
|
|
51
|
+
height: z.number(),
|
|
52
|
+
scale: z.number(),
|
|
53
|
+
matchFinished: z.boolean(),
|
|
54
|
+
bases: z.tuple([z.boolean(), z.boolean(), z.boolean()]),
|
|
55
|
+
homeInning: z.boolean(),
|
|
56
|
+
inning: z.number().nonnegative(),
|
|
57
|
+
outs: z.number().nonnegative(),
|
|
58
|
+
balls: z.number().nonnegative(),
|
|
59
|
+
strikes: z.number().nonnegative(),
|
|
60
|
+
baseTimeTimestamp: z.number(),
|
|
61
|
+
baseTimePlaytime: z.number(),
|
|
62
|
+
timeIsRunning: z.boolean(),
|
|
63
|
+
teamHomeShortname: z.string(),
|
|
64
|
+
teamGuestShortname: z.string(),
|
|
65
|
+
teamHomeBackgroundColor: z.string(),
|
|
66
|
+
teamGuestBackgroundColor: z.string(),
|
|
67
|
+
teamHomeTextColor: z.string(),
|
|
68
|
+
teamGuestTextColor: z.string(),
|
|
69
|
+
teamHomeCurrentScore: z.number(),
|
|
70
|
+
teamGuestCurrentScore: z.number(),
|
|
71
|
+
footerImgPath: z.string().optional(),
|
|
72
|
+
footerText: z.string().optional(),
|
|
73
|
+
footerBackgroundColor: z.string().optional(),
|
|
74
|
+
footerTextColor: z.string().optional(),
|
|
75
|
+
font: sportFontSchema.default('classic'),
|
|
76
|
+
});
|
|
77
|
+
export const baseballScoreBoardAutomaticSchema = z.object({
|
|
78
|
+
id: z.number().nonnegative(),
|
|
79
|
+
enabled: z.union([z.literal(0), z.literal(1)]),
|
|
80
|
+
schedule: z.string().optional(),
|
|
81
|
+
cameraList: z.array(z.number()),
|
|
82
|
+
zIndex: z.number().nonnegative(),
|
|
83
|
+
name: z.literal(serviceNames.myBallBaseballWidgets),
|
|
84
|
+
width: z.number(),
|
|
85
|
+
height: z.number(),
|
|
86
|
+
scale: z.number(),
|
|
87
|
+
matchDetailLink: z.string(),
|
|
88
|
+
matchListLink: z.string(),
|
|
89
|
+
mirrored: z.boolean(),
|
|
90
|
+
pregameWidgetText: z.string(),
|
|
91
|
+
teamHomeBackgroundColor: z.string(),
|
|
92
|
+
teamGuestBackgroundColor: z.string(),
|
|
93
|
+
teamHomeTextColor: z.string(),
|
|
94
|
+
teamGuestTextColor: z.string(),
|
|
95
|
+
homeLogoPath: z.string(),
|
|
96
|
+
guestLogoPath: z.string(),
|
|
97
|
+
footerImgPath: z.string().optional(),
|
|
98
|
+
footerText: z.string().optional(),
|
|
99
|
+
footerBackgroundColor: z.string().optional(),
|
|
100
|
+
footerTextColor: z.string().optional(),
|
|
101
|
+
font: sportFontSchema.default('classic'),
|
|
102
|
+
});
|
|
103
|
+
export const scoreOverviewSchema = z.object({
|
|
104
|
+
id: z.number().nonnegative(),
|
|
105
|
+
enabled: z.union([z.literal(0), z.literal(1)]),
|
|
106
|
+
cameraList: z.array(z.number()),
|
|
107
|
+
zIndex: z.number().nonnegative(),
|
|
108
|
+
name: z.literal(serviceNames.scoreOverview),
|
|
109
|
+
pos_x: z.number(),
|
|
110
|
+
pos_y: z.number(),
|
|
111
|
+
coordSystem: coordinateSystemSchema,
|
|
112
|
+
width: z.number(),
|
|
113
|
+
height: z.number(),
|
|
114
|
+
scale: z.number(),
|
|
115
|
+
teamHomeName: z.string(),
|
|
116
|
+
teamGuestName: z.string(),
|
|
117
|
+
teamHomeBackgroundColor: z.string(),
|
|
118
|
+
teamGuestBackgroundColor: z.string(),
|
|
119
|
+
teamHomeTextColor: z.string(),
|
|
120
|
+
teamGuestTextColor: z.string(),
|
|
121
|
+
teamHomeImgPath: z.string(),
|
|
122
|
+
teamGuestImgPath: z.string(),
|
|
123
|
+
teamHomeCurrentScore: z.number(),
|
|
124
|
+
teamGuestCurrentScore: z.number(),
|
|
125
|
+
scoreVisible: z.boolean(),
|
|
126
|
+
description: z.string(),
|
|
127
|
+
textFont: sportFontSchema.default('classic'),
|
|
128
|
+
scoreFont: z.literal('classic'),
|
|
129
|
+
});
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const serviceNames = {
|
|
3
|
+
accuweather: 'accuweather',
|
|
4
|
+
infoticker: 'infoticker',
|
|
5
|
+
customGraphics: 'customGraphics',
|
|
6
|
+
ptzCompass: 'ptzCompass',
|
|
7
|
+
images: 'images',
|
|
8
|
+
ptz: 'ptz',
|
|
9
|
+
pip: 'pip',
|
|
10
|
+
screenSharing: 'screenSharing',
|
|
11
|
+
web_camera: 'web_camera',
|
|
12
|
+
scoreBoard: 'scoreBoard',
|
|
13
|
+
baseballScoreBoard: 'baseballScoreBoard',
|
|
14
|
+
myBallBaseballWidgets: 'myBallBaseballWidgets',
|
|
15
|
+
scoreOverview: 'scoreOverview',
|
|
16
|
+
};
|
|
17
|
+
export const coordinateSystemSchema = z.union([
|
|
18
|
+
z.literal('top_left'),
|
|
19
|
+
z.literal('top'),
|
|
20
|
+
z.literal('top_right'),
|
|
21
|
+
z.literal('left'),
|
|
22
|
+
z.literal('center'),
|
|
23
|
+
z.literal('right'),
|
|
24
|
+
z.literal('bottom_left'),
|
|
25
|
+
z.literal('bottom'),
|
|
26
|
+
z.literal('bottom_right'),
|
|
27
|
+
]);
|
|
28
|
+
export const languageSchema = z.union([
|
|
29
|
+
z.literal('en-us'),
|
|
30
|
+
z.literal('fr-fr'),
|
|
31
|
+
z.literal('ja-jp'),
|
|
32
|
+
z.literal('pt-pt'),
|
|
33
|
+
z.literal('es-es'),
|
|
34
|
+
z.literal('de-de'),
|
|
35
|
+
z.literal('ko-kr'),
|
|
36
|
+
z.literal('zh-hk'),
|
|
37
|
+
z.literal('zh-cn'),
|
|
38
|
+
z.literal('nl-nl'),
|
|
39
|
+
z.literal('cs-cz'),
|
|
40
|
+
z.literal('ru-ru'),
|
|
41
|
+
z.literal('sv-se'),
|
|
42
|
+
]);
|
|
43
|
+
export const fontSchema = z.union([
|
|
44
|
+
z.literal('classic'),
|
|
45
|
+
z.literal('digital'),
|
|
46
|
+
z.custom((val) => {
|
|
47
|
+
return typeof val === 'string';
|
|
48
|
+
}),
|
|
49
|
+
]);
|
|
50
|
+
export const weatherUnitSchema = z.union([z.literal('Metric'), z.literal('Imperial')]);
|
|
51
|
+
export const serviceCommonSchema = z.object({
|
|
52
|
+
id: z.number().nonnegative(),
|
|
53
|
+
enabled: z.union([z.literal(0), z.literal(1)]),
|
|
54
|
+
automationType: z.union([
|
|
55
|
+
z.literal('time'),
|
|
56
|
+
z.literal('manual'),
|
|
57
|
+
z.literal('schedule'),
|
|
58
|
+
z.custom((val) => {
|
|
59
|
+
return typeof val === 'string' ? /^input\d+$/.test(val) : false;
|
|
60
|
+
}),
|
|
61
|
+
]),
|
|
62
|
+
invertInput: z.boolean().optional(),
|
|
63
|
+
cameraList: z.array(z.number()),
|
|
64
|
+
camera: z.number().nonnegative().optional(),
|
|
65
|
+
schedule: z.string().optional(),
|
|
66
|
+
customName: z.string().default(''),
|
|
67
|
+
zIndex: z.number().optional(),
|
|
68
|
+
width: z.number().nonnegative(),
|
|
69
|
+
height: z.number().nonnegative(),
|
|
70
|
+
});
|
|
71
|
+
export const sharingSchema = serviceCommonSchema.extend({
|
|
72
|
+
pos_x: z.number().nonnegative(),
|
|
73
|
+
pos_y: z.number().nonnegative(),
|
|
74
|
+
coordSystem: coordinateSystemSchema,
|
|
75
|
+
screenSize: z.number().positive(),
|
|
76
|
+
fps: z.number(),
|
|
77
|
+
});
|
|
78
|
+
export const overlaySchema = z.object({
|
|
79
|
+
active: z.boolean(),
|
|
80
|
+
coordSystem: coordinateSystemSchema,
|
|
81
|
+
pos_x: z.number(),
|
|
82
|
+
pos_y: z.number(),
|
|
83
|
+
imgPath: z.string(),
|
|
84
|
+
imgName: z.string(),
|
|
85
|
+
duration: z.number(),
|
|
86
|
+
scale: z.number(),
|
|
87
|
+
fps: z.number().optional(),
|
|
88
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,17 +1,33 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { flashStorageTypeSchema, sdCardStorageTypeSchema, storageTypeSchema } from './common';
|
|
3
|
+
export const nodeStateSchema = z.object({
|
|
4
|
+
node_state: z.union([z.literal('OK'), z.literal('NOT_INSTALLED'), z.literal('NOT_FOUND')]),
|
|
5
|
+
});
|
|
2
6
|
export const packageInfoListSchema = z.array(z.object({
|
|
3
|
-
storage:
|
|
7
|
+
storage: storageTypeSchema,
|
|
4
8
|
manifest: z.object({
|
|
5
9
|
package_name: z.string(),
|
|
6
10
|
package_menu_name: z.string(),
|
|
7
11
|
package_version: z.string(),
|
|
8
12
|
vendor: z.string(),
|
|
9
|
-
required_camscripter_version: z.string(),
|
|
10
|
-
required_camscripter_rbi_version: z.string(),
|
|
13
|
+
required_camscripter_version: z.string().optional(),
|
|
14
|
+
required_camscripter_rbi_version: z.string().optional(),
|
|
11
15
|
ui_link: z.string(),
|
|
12
16
|
}),
|
|
13
17
|
}));
|
|
14
|
-
export const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
})
|
|
18
|
+
export const packageConfigSchema = z.record(z.string(), z.object({ enabled: z.boolean() }));
|
|
19
|
+
export const cameraStorageSchema = z.union([
|
|
20
|
+
z.tuple([
|
|
21
|
+
z.object({ type: flashStorageTypeSchema, capacity_mb: z.number() }),
|
|
22
|
+
z.object({ type: sdCardStorageTypeSchema, capacity_mb: z.number() }),
|
|
23
|
+
]),
|
|
24
|
+
z.tuple([z.object({ type: flashStorageTypeSchema, capacity_mb: z.number() })]),
|
|
25
|
+
]);
|
|
26
|
+
export const camscripterApiResponseSchema = z.object({
|
|
27
|
+
status: z.number(),
|
|
28
|
+
message: z.string(),
|
|
29
|
+
});
|
|
30
|
+
export const cameraTimeResponseSchema = z.object({
|
|
31
|
+
state: z.boolean(),
|
|
32
|
+
code: z.number(),
|
|
33
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
export const
|
|
2
|
+
export const cameraStreamSchema = z.object({
|
|
3
3
|
enabled: z.string(),
|
|
4
4
|
active: z.string(),
|
|
5
5
|
audioSource: z.string(),
|
|
@@ -22,4 +22,35 @@ export const streamAttributesSchema = z.object({
|
|
|
22
22
|
startTime: z.string(),
|
|
23
23
|
stopTime: z.string(),
|
|
24
24
|
});
|
|
25
|
-
export const
|
|
25
|
+
export const streamSchema = z.object({
|
|
26
|
+
enabled: z.union([z.literal(0), z.literal(1)]),
|
|
27
|
+
active: z.union([z.literal(0), z.literal(1)]),
|
|
28
|
+
audioSource: z.string(),
|
|
29
|
+
avSyncMsec: z.number().int(),
|
|
30
|
+
internalVapixParameters: z.string(),
|
|
31
|
+
userVapixParameters: z.string(),
|
|
32
|
+
outputParameters: z.string(),
|
|
33
|
+
outputType: z.union([z.literal('video'), z.literal('images'), z.literal('none')]),
|
|
34
|
+
mediaServerUrl: z.string(),
|
|
35
|
+
inputType: z.union([z.literal('CSw'), z.literal('CRS'), z.literal('RTSP_URL')]),
|
|
36
|
+
inputUrl: z.string(),
|
|
37
|
+
forceStereo: z.union([z.literal(0), z.literal(1)]),
|
|
38
|
+
streamDelay: z.number().nullable(),
|
|
39
|
+
statusLed: z.number(),
|
|
40
|
+
statusPort: z.string(),
|
|
41
|
+
callApi: z.number().int(),
|
|
42
|
+
trigger: z.string(),
|
|
43
|
+
schedule: z.string(),
|
|
44
|
+
prepareAhead: z.number().int(),
|
|
45
|
+
startTime: z.number().nullable(),
|
|
46
|
+
stopTime: z.number().nullable(),
|
|
47
|
+
});
|
|
48
|
+
export const cameraStreamResponseSchema = z.object({
|
|
49
|
+
data: cameraStreamSchema,
|
|
50
|
+
code: z.number(),
|
|
51
|
+
message: z.string(),
|
|
52
|
+
});
|
|
53
|
+
export const camstreamerServerResponseSchema = z.object({
|
|
54
|
+
code: z.number(),
|
|
55
|
+
message: z.string(),
|
|
56
|
+
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { toCamelCase, toCamelCaseDeep } from '../internal/transformers';
|
|
3
|
-
import { storageTypeSchema, keyboardShortcutsSchema, h264ProfileSchema, audioChannelCountSchema, } from './common';
|
|
3
|
+
import { storageTypeSchema, keyboardShortcutsSchema, h264ProfileSchema, audioChannelCountSchema, keyboardShortcutSchema, } from './common';
|
|
4
4
|
const channelTypeSchema = z.union([z.literal('audio'), z.literal('video'), z.literal('av')]);
|
|
5
5
|
const playlistPlayTypeSchema = z.union([
|
|
6
6
|
z.literal('PLAY_ALL'),
|
|
@@ -132,3 +132,40 @@ export const clipListSchema = z.object({
|
|
|
132
132
|
])),
|
|
133
133
|
})),
|
|
134
134
|
});
|
|
135
|
+
export const bitrateModeSchema = z.union([z.literal('VBR'), z.literal('MBR'), z.literal('ABR')]);
|
|
136
|
+
export const bitrateVapixParamsSchema = z.object({
|
|
137
|
+
bitrateMode: bitrateModeSchema,
|
|
138
|
+
maximumBitRate: z.number(),
|
|
139
|
+
retentionTime: z.number(),
|
|
140
|
+
bitRateLimit: z.number(),
|
|
141
|
+
});
|
|
142
|
+
export const cameraOptionsSchema = bitrateVapixParamsSchema
|
|
143
|
+
.extend({
|
|
144
|
+
resolution: z.string(),
|
|
145
|
+
h264Profile: h264ProfileSchema,
|
|
146
|
+
fps: z.number(),
|
|
147
|
+
compression: z.number().min(0).max(100),
|
|
148
|
+
govLength: z.number(),
|
|
149
|
+
bitrateVapixParams: z.string().nullable(),
|
|
150
|
+
audioSampleRate: z.number(),
|
|
151
|
+
audioChannelCount: audioChannelCountSchema,
|
|
152
|
+
keyboard: z.object({
|
|
153
|
+
fromSource: keyboardShortcutSchema,
|
|
154
|
+
none: keyboardShortcutSchema,
|
|
155
|
+
}),
|
|
156
|
+
})
|
|
157
|
+
.partial();
|
|
158
|
+
export const globalAudioSettingsTypeSchema = z.union([z.literal('fromSource'), z.literal('source')]);
|
|
159
|
+
export const globalAudioSettingsSchema = z.object({
|
|
160
|
+
type: globalAudioSettingsTypeSchema,
|
|
161
|
+
source: z.string(),
|
|
162
|
+
storage: z.string().optional(),
|
|
163
|
+
});
|
|
164
|
+
export const secondaryAudioSettingsSchema = z.object({
|
|
165
|
+
type: z.union([z.literal('CLIP'), z.literal('STREAM'), z.literal('NONE')]),
|
|
166
|
+
streamName: z.string().optional(),
|
|
167
|
+
clipName: z.string().optional(),
|
|
168
|
+
storage: storageTypeSchema,
|
|
169
|
+
secondaryAudioLevel: z.number(),
|
|
170
|
+
masterAudioLevel: z.number(),
|
|
171
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const successResponseSchema = z.object({
|
|
3
|
+
Rsp: z.object({
|
|
4
|
+
Status: z.literal('Ok'),
|
|
5
|
+
}),
|
|
6
|
+
});
|
|
7
|
+
export const cameraGuidsResponseSchema = z.object({
|
|
8
|
+
Rsp: z.object({
|
|
9
|
+
Status: z.literal('Ok'),
|
|
10
|
+
Result: z.array(z.object({ Guid: z.string() })),
|
|
11
|
+
}),
|
|
12
|
+
});
|
|
13
|
+
export const cameraDetailSchema = z.object({
|
|
14
|
+
Guid: z.string().optional(),
|
|
15
|
+
Name: z.string().optional(),
|
|
16
|
+
EntityType: z.string().optional(),
|
|
17
|
+
});
|
|
18
|
+
export const cameraDetailsResponseSchema = z.object({
|
|
19
|
+
Rsp: z.object({
|
|
20
|
+
Status: z.literal('Ok'),
|
|
21
|
+
Result: z.union([z.array(cameraDetailSchema), cameraDetailSchema]),
|
|
22
|
+
}),
|
|
23
|
+
});
|
|
24
|
+
export const cameraListSchema = z.array(z.object({
|
|
25
|
+
index: z.number(),
|
|
26
|
+
value: z.string(),
|
|
27
|
+
label: z.string(),
|
|
28
|
+
}));
|