import { z } from "zod"; import { looseObject } from "./utils.js"; export const authDiff = looseObject({ added: z.array(z.string()), removed: z.array(z.string()), }); export type AuthDiff = z.infer; export const componentDefinitionDiff = looseObject({}); export type ComponentDefinitionDiff = z.infer; export const componentDiffType = z.discriminatedUnion("type", [ looseObject({ type: z.literal("create"), }), looseObject({ type: z.literal("modify"), }), looseObject({ type: z.literal("unmount"), }), looseObject({ type: z.literal("remount"), }), ]); export type ComponentDiffType = z.infer; export const moduleDiff = looseObject({ added: z.array(z.string()), removed: z.array(z.string()), }); export type ModuleDiff = z.infer; export const udfConfigDiff = looseObject({ previous_version: z.string(), next_version: z.string(), }); export type UdfConfigDiff = z.infer; export const cronDiff = looseObject({ added: z.array(z.string()), updated: z.array(z.string()), deleted: z.array(z.string()), }); export type CronDiff = z.infer; const developerIndexConfig = z.intersection( z.discriminatedUnion("type", [ looseObject({ name: z.string(), type: z.literal("database"), fields: z.array(z.string()), }), looseObject({ name: z.string(), type: z.literal("search"), searchField: z.string(), filterFields: z.array(z.string()), }), looseObject({ name: z.string(), type: z.literal("vector"), dimensions: z.number(), vectorField: z.string(), filterFields: z.array(z.string()), }), ]), z.object({ staged: z.boolean().optional() }), ); export type DeveloperIndexConfig = z.infer; export const indexDiff = looseObject({ added_indexes: z.array(developerIndexConfig), removed_indexes: z.array(developerIndexConfig), enabled_indexes: z.array(developerIndexConfig).optional(), disabled_indexes: z.array(developerIndexConfig).optional(), }); export type IndexDiff = z.infer; export const schemaDiff = looseObject({ previous_schema: z.nullable(z.string()), next_schema: z.nullable(z.string()), }); export type SchemaDiff = z.infer; export const componentDiff = looseObject({ diffType: componentDiffType, moduleDiff, udfConfigDiff: z.nullable(udfConfigDiff), cronDiff, indexDiff, schemaDiff: z.nullable(schemaDiff), }); export type ComponentDiff = z.infer; export const finishPushDiff = looseObject({ authDiff, definitionDiffs: z.record(z.string(), componentDefinitionDiff), componentDiffs: z.record(z.string(), componentDiff), }); export type FinishPushDiff = z.infer;