fix(schema): compose portable stack-safe base64 constraints

Replace the lookahead-based pattern with separate allOf/not JSON Schema rules for quartet length, alphabet, padding and canonical pad bits. Share the runtime predicates with HAR and padded base64 parsing.

Validate converted advertised leaves with the MCP SDK validator, preserve permissive versus canonical semantics, and exercise every pattern near the 32 MiB encoded-input budget in all JavaScript modes.
This commit is contained in:
morluto committed 2026-10-20 00:05:22 +08:00
1 parent 4af71a45f9
commit 0949313d8f
8 files changed
+174 -47

No files matched your search

+2 -2
View File
@@ -2,13 +2,13 @@ import { z } from "zod";
import { canBorrowParsedJsonSnapshot } from "../immutableJson.js";
import { localPathStringSchema } from "../localPath.js";
import { CANONICAL_BASE64_PATTERN } from "../stringPatterns.js";
import { canonicalBase64Schema } from "../stringPatterns.js";
const unsignedHex = z.string().regex(/^0x(?:0|[1-9a-f][0-9a-f]{0,15})$/);
const index = z.number().int().nonnegative();
const scalar = z.union([z.string(), z.number().int()]);
const range = z.strictObject({ offset: unsignedHex, bytes: unsignedHex });
const canonicalBase64 = z.string().regex(CANONICAL_BASE64_PATTERN);
const canonicalBase64 = canonicalBase64Schema;
const name = z.strictObject({
display: z.string(),
bytes_base64: canonicalBase64.nullable(),