Files
rea/src/domain/javascript/javascriptRouteFacts.ts
T

61 lines
1.9 KiB
TypeScript

import { z } from "zod";
import { javascriptSourceRangeSchema } from "./javascriptSourceCoordinates.js";
export const javaScriptRouteMechanismSchema = z.enum([
"router-call",
"nested-route-object",
"typed-route-tree",
"next-app-chunk",
"navigation-target",
"route-string-constant",
]);
export const javaScriptRouteSegmentSchema = z.strictObject({
value: z.string(),
location: javascriptSourceRangeSchema,
origin: z.enum(["literal", "property-name", "next-app-path"]),
});
export const javaScriptRouteCandidateSchema = z.strictObject({
path: z.string().startsWith("/"),
mechanism: javaScriptRouteMechanismSchema,
confidence: z.enum(["low", "medium", "high"]),
derivation: z.enum(["literal", "joined", "inferred"]),
location: javascriptSourceRangeSchema,
segments: z.array(javaScriptRouteSegmentSchema),
});
export const javaScriptRouteWorkCapacitySchema = z.strictObject({
kind: z.literal("route-work-or-facts"),
limit_bytes: z.int().nonnegative(),
accounted_fact_bytes: z.int().nonnegative(),
accounted_work_bytes: z.int().nonnegative(),
});
export const javaScriptRouteSourceFactsSchema = z.strictObject({
candidates: z.array(javaScriptRouteCandidateSchema),
unresolved: z.array(
z.strictObject({
mechanism: javaScriptRouteMechanismSchema,
location: javascriptSourceRangeSchema,
reason: z.string(),
}),
),
capacity: z
.discriminatedUnion("kind", [
javaScriptRouteWorkCapacitySchema,
z.strictObject({
kind: z.literal("result-bytes"),
limit_bytes: z.int().nonnegative(),
preceding_work_capacity: javaScriptRouteWorkCapacitySchema.nullable(),
}),
])
.nullable(),
});
export type JavaScriptRouteCandidate = z.infer<
typeof javaScriptRouteCandidateSchema
>;
export type JavaScriptRouteSegment = z.infer<
typeof javaScriptRouteSegmentSchema
>;
export type JavaScriptRouteSourceFacts = z.infer<
typeof javaScriptRouteSourceFactsSchema
>;