feat: Add or, and and not condition types (#1980)

[skip ci]
This commit is contained in:
Dermot Duffy
2025-03-23 21:04:15 -07:00
committed by GitHub
parent f140f6a653
commit a3b17d8cb2
6 changed files with 312 additions and 20 deletions
+43 -1
View File
@@ -17,12 +17,54 @@ import { screenConditionSchema } from './stock/screen';
import { stateConditionSchema } from './stock/state';
import { usersConditionSchema } from './stock/users';
export const advancedCameraCardConditionSchema = z.discriminatedUnion('condition', [
// https://www.home-assistant.io/docs/scripts/conditions/#or-condition
type OrCondition = {
condition: 'or';
conditions: AdvancedCameraCardCondition[];
};
const orConditionSchema: z.ZodSchema<OrCondition> = z.object({
condition: z.literal('or'),
conditions: z
.lazy(() => advancedCameraCardConditionSchema)
.array()
.min(1),
});
// https://www.home-assistant.io/docs/scripts/conditions/#and-condition
type AndCondition = {
condition: 'and';
conditions: AdvancedCameraCardCondition[];
};
const andConditionSchema: z.ZodSchema<AndCondition> = z.object({
condition: z.literal('and'),
conditions: z
.lazy(() => advancedCameraCardConditionSchema)
.array()
.min(1),
});
// https://www.home-assistant.io/docs/scripts/conditions/#not-condition
type NotCondition = {
condition: 'not';
conditions: AdvancedCameraCardCondition[];
};
const notConditionSchema: z.ZodSchema<NotCondition> = z.object({
condition: z.literal('not'),
conditions: z
.lazy(() => advancedCameraCardConditionSchema)
.array()
.min(1),
});
export const advancedCameraCardConditionSchema = z.union([
// Stock conditions:
numericStateConditionSchema,
screenConditionSchema,
stateConditionSchema,
usersConditionSchema,
orConditionSchema,
andConditionSchema,
notConditionSchema,
// Custom conditions:
cameraConditionSchema,