import type { PlayAuthoringInputContract } from './authoring-contract'; function freezeInputSchema( schema: Record, ): Record { const visited = new WeakSet(); const freeze = (value: unknown): void => { if (value === null || typeof value !== 'object' || visited.has(value)) { return; } visited.add(value); for (const child of Object.values(value)) freeze(child); Object.freeze(value); }; freeze(schema); return schema; } export function createPlayInputContract( schema: Record, ): PlayAuthoringInputContract { if (!schema || typeof schema !== 'object' || Array.isArray(schema)) { throw new Error( 'defineInput(schema) requires a JSON-schema-like object.', ); } return Object.freeze({ schema: freezeInputSchema(schema) }); }