Files
rea/experiments/atomic-codemode/api-contracts.mjs
T

25 lines
616 B
JavaScript

// Shared named contract and selection vocabulary; no engine or adapter code.
import { z } from "zod";
export const hex = z.string().regex(/^0x(?:0|[1-9a-f][0-9a-f]{0,15})$/u);
export const valueLocation = z.strictObject({
space: z.string(),
offset: hex,
size_bytes: z.number().int().positive(),
});
export const page = {
offset: z.number().int().nonnegative().default(0),
limit: z.number().int().min(1).max(128).default(20),
};
export const definition = (
{ summary, description },
input,
method,
example,
) => ({
summary,
description,
input: z.strictObject(input),
method,
example,
});