first commit
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
import { z } from "zod";
|
||||
|
||||
const intensity = z.enum(["mild", "moderate", "strong"]);
|
||||
const confidence = z.enum(["high", "medium", "low"]);
|
||||
|
||||
export const ratingExplainedSchema = z.object({
|
||||
officialRating: z.string(),
|
||||
region: z.string(),
|
||||
summary: z.string(),
|
||||
factors: z.array(
|
||||
z.object({
|
||||
category: z.enum([
|
||||
"violence",
|
||||
"language",
|
||||
"sexuality",
|
||||
"substances",
|
||||
"frightening",
|
||||
"other",
|
||||
]),
|
||||
intensity,
|
||||
description: z.string(),
|
||||
approximateTiming: z.string().optional(),
|
||||
confidence: confidence.optional(),
|
||||
}),
|
||||
),
|
||||
borderlineNote: z.string().optional(),
|
||||
});
|
||||
|
||||
export const skipGuideSchema = z.object({
|
||||
originalRating: z.string(),
|
||||
suggestedAudienceAge: z.number().int().min(0).max(21),
|
||||
totalSkippedMinutes: z.number().int().min(0),
|
||||
segments: z.array(
|
||||
z.object({
|
||||
start: z.string(),
|
||||
end: z.string(),
|
||||
reason: z.string(),
|
||||
intensity,
|
||||
plotImpact: z.enum(["none", "minor", "significant"]),
|
||||
skipRecommendation: z.enum(["recommended", "optional", "do_not_skip"]),
|
||||
resumeHint: z.string(),
|
||||
}),
|
||||
),
|
||||
disclaimer: z.string(),
|
||||
});
|
||||
|
||||
export const sensitivityGuideSchema = z.object({
|
||||
summary: z.string(),
|
||||
themes: z.array(
|
||||
z.object({
|
||||
theme: z.string(),
|
||||
severity: intensity,
|
||||
description: z.string(),
|
||||
approximateTiming: z.string().optional(),
|
||||
}),
|
||||
),
|
||||
});
|
||||
|
||||
export const internationalRatingsSchema = z.object({
|
||||
ratings: z.array(
|
||||
z.object({
|
||||
country: z.string(),
|
||||
countryCode: z.string(),
|
||||
rating: z.string(),
|
||||
descriptors: z.array(z.string()).optional(),
|
||||
}),
|
||||
),
|
||||
discrepancyNote: z.string(),
|
||||
strictestCountry: z.string().optional(),
|
||||
mostLenientCountry: z.string().optional(),
|
||||
});
|
||||
|
||||
export const productionFactsSchema = z.object({
|
||||
facts: z.array(
|
||||
z.object({
|
||||
category: z.string(),
|
||||
fact: z.string(),
|
||||
}),
|
||||
),
|
||||
budget: z.string().optional(),
|
||||
boxOffice: z.string().optional(),
|
||||
filmingLocations: z.array(z.string()).optional(),
|
||||
});
|
||||
|
||||
export const historicalAccuracySchema = z.object({
|
||||
accuracyScore: z.number().min(0).max(100),
|
||||
summary: z.string(),
|
||||
accurateElements: z.array(z.string()),
|
||||
inventions: z.array(
|
||||
z.object({
|
||||
claim: z.string(),
|
||||
reality: z.string(),
|
||||
}),
|
||||
),
|
||||
confidence,
|
||||
});
|
||||
|
||||
export type RatingExplained = z.infer<typeof ratingExplainedSchema>;
|
||||
export type SkipGuide = z.infer<typeof skipGuideSchema>;
|
||||
export type SensitivityGuide = z.infer<typeof sensitivityGuideSchema>;
|
||||
export type InternationalRatings = z.infer<typeof internationalRatingsSchema>;
|
||||
export type ProductionFacts = z.infer<typeof productionFactsSchema>;
|
||||
export type HistoricalAccuracy = z.infer<typeof historicalAccuracySchema>;
|
||||
Reference in New Issue
Block a user