mirror of
https://github.com/supabase/supabase.git
synced 2026-10-07 18:35:07 +03:00
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Ivan Vasilov <vasilov.ivan@gmail.com>
83 lines
2.3 KiB
TypeScript
83 lines
2.3 KiB
TypeScript
import { z } from 'zod'
|
|
|
|
import { LOG_TYPES, METHODS, REGIONS } from './UnifiedLogs.constants'
|
|
import {
|
|
ARRAY_DELIMITER,
|
|
LEVELS,
|
|
RANGE_DELIMITER,
|
|
} from '@/components/ui/DataTable/DataTable.constants'
|
|
|
|
export const columnSchema = z.object({
|
|
id: z.string(),
|
|
log_type: z.enum(LOG_TYPES),
|
|
method: z.enum(METHODS),
|
|
pathname: z.string(),
|
|
level: z.enum(LEVELS),
|
|
status: z.number(),
|
|
date: z.date(),
|
|
timestamp: z.number(),
|
|
event_message: z.string().optional(),
|
|
log_count: z.number().optional(), // used to count function logs for a given execution_id
|
|
logs: z.array(z.any()).optional(), // array of function logs
|
|
auth_user: z.string().optional(),
|
|
})
|
|
|
|
export type ColumnSchema = z.infer<typeof columnSchema>
|
|
|
|
export const columnFilterSchema = z.object({
|
|
level: z
|
|
.string()
|
|
.transform((val) => val.split(ARRAY_DELIMITER))
|
|
.pipe(z.enum(LEVELS).array())
|
|
.optional(),
|
|
method: z
|
|
.string()
|
|
.transform((val) => val.split(ARRAY_DELIMITER))
|
|
.pipe(z.enum(METHODS).array())
|
|
.optional(),
|
|
pathname: z.string().optional(),
|
|
status: z
|
|
.string()
|
|
.transform((val) => val.split(ARRAY_DELIMITER))
|
|
.pipe(z.string().array())
|
|
.optional(),
|
|
regions: z
|
|
.string()
|
|
.transform((val) => val.split(ARRAY_DELIMITER))
|
|
.pipe(z.enum(REGIONS).array())
|
|
.optional(),
|
|
date: z
|
|
.string()
|
|
.transform((val) => val.split(RANGE_DELIMITER).map(Number))
|
|
.pipe(z.coerce.date().array())
|
|
.optional(),
|
|
auth_user: z.string().optional(),
|
|
})
|
|
|
|
export type ColumnFilterSchema = z.infer<typeof columnFilterSchema>
|
|
|
|
export const facetMetadataSchema = z.object({
|
|
rows: z.array(z.object({ value: z.any(), total: z.number() })),
|
|
total: z.number(),
|
|
min: z.number().optional(),
|
|
max: z.number().optional(),
|
|
})
|
|
|
|
export type FacetMetadataSchema = z.infer<typeof facetMetadataSchema>
|
|
|
|
export type BaseChartSchema = { timestamp: number; [key: string]: number }
|
|
|
|
export const timelineChartSchema = z.object({
|
|
timestamp: z.number(), // UNIX
|
|
...LEVELS.reduce(
|
|
(acc, level) => ({
|
|
...acc,
|
|
[level]: z.number().default(0),
|
|
}),
|
|
{} as Record<(typeof LEVELS)[number], z.ZodNumber>
|
|
),
|
|
// REMINDER: make sure to have the `timestamp` field in the object
|
|
}) satisfies z.ZodType<BaseChartSchema>
|
|
|
|
export type TimelineChartSchema = z.infer<typeof timelineChartSchema>
|