Something went wrong. Try again.
Starship Simulator Controls thoriumsim.com
Something went wrong. Try again.
1.2 kB · 49 lines
TypeScript
at develop
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950import z from "zod";
export const componentQuery = z.object({ component: z.string(), property: z.string(), comparison: z.string().nullish(), value: z.any(),});
export const valueQuery = z.object({ query: z.array(componentQuery), select: z .object({ component: z.string(), property: z.string(), matchType: z.union([z.literal("all"), z.literal("first"), z.literal("random")]).optional(), }) .optional(),});
export const actionItem = z.object({ id: z.string(), name: z.string(), action: z.string(), values: z.record(z.any()),});export const actionSchema = z.array(actionItem).default([]);
const eventListener = z.object({ type: z.literal("eventListener"), event: z.string(), values: z.record(z.any()).optional(),});
const distance = z.object({ type: z.literal("distance"), entityA: z.number(), entityB: z.number(), distance: z.coerce.number(), condition: z.union([z.literal("less than"), z.literal("more than")]),});
const entityMatch = z.object({ type: z.literal("entityMatch"), query: z.array(componentQuery), matchCount: z.union([z.literal("any"), z.literal("one"), z.literal("no")]),});
export const conditionSchema = z.discriminatedUnion("type", [eventListener, distance, entityMatch]);