render-core-schemastable
Canonical TypeScript schema and protocol definitions for the react-render-kit ecosystem — one shared vocabulary for all packages. Zero deps, zero runtime coupling. Includes type guards and version utilities for boundary validation.
Install: pnpm add @sapanmozammel/render-core-schema
✓ utility
Live type-guard playground. Type any value and see which canonical schema types it matches. Useful for validating incoming data at system boundaries — API responses, localStorage reads, WebSocket payloads.
Type guard playground
isSchemaVersion("1.0.0")true ✓
narrows toSchemaVersion
isEventType("1.0.0")false
isHealthGrade("1.0.0")false
isFrequencyClass("1.0.0")false
isMemoClassification("1.0.0")false
isSignalKind("1.0.0")false
isRenderTrigger("1.0.0")false
isInferredTrigger("1.0.0")false
▸How to use render-core-schema
import type {
TelemetryEvent, RenderEvent, PropChangeEvent, ScoreEvent,
HealthGrade, MemoClassification, FrequencyClass, SignalKind,
ReplayEngine, ReplayFrame, ReplayFilter, ReplayCursor,
SchemaVersion,
} from '@sapanmozammel/render-core-schema';
import {
CURRENT_SCHEMA_VERSION,
isSchemaVersion,
isHealthGrade,
isEventType,
compareSchemaVersions,
isSchemaVersionAtLeast,
} from '@sapanmozammel/render-core-schema';
// Type-guard pattern for incoming payloads:
const parseEvent = (raw: unknown): TelemetryEvent | null => {
if (typeof raw !== 'object' || raw === null) return null;
const { type, schemaVersion } = raw as Record<string, unknown>;
if (!isEventType(type)) return null;
if (!isSchemaVersion(schemaVersion)) return null;
if (!isSchemaVersionAtLeast(schemaVersion, '1.0.0')) return null;
return raw as TelemetryEvent;
};
// Exhaustive narrowing — TypeScript enforces every branch:
const handleEvent = (event: TelemetryEvent): void => {
switch (event.type) {
case 'render': return handleRender(event); // RenderEvent
case 'prop-change': return handlePropChange(event);
case 'score': return handleScore(event); // ScoreEvent
case 'session-start': return handleStart(event);
case 'session-end': return handleEnd(event);
case 'frequency': return handleFrequency(event);
case 'recommendation': return handleRec(event);
// No default needed — TypeScript knows all cases are covered
}
};Zero runtime dependencies. No React peer dep. Safe to import in Node.js workers, serverless functions, CLI tools, and browser contexts alike.