react-render-kit
← All tools

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.