/** * Diagnostic shim for tiny-invariant. The prod tiny-invariant strips * the failure message, so we lose the actual reason for any Craft.js * Invariant. Aliasing tiny-invariant -> this shim restores it. */ /** * Some Craft.js invariants are used as control-flow (try/catch wraps them * to test a condition without explicit branching). Logging every one would * drown out the actually-interesting failures. Suppress the well-known * "is-it-X check" messages and log only the unfamiliar ones. */ const BENIGN = new Set([ 'A top-level Node cannot be moved', 'Cannot drag a non-canvas Node onto another Node', ]); export default function invariant(condition: unknown, message?: string | (() => string)): asserts condition { if (condition) return; const provided = typeof message === 'function' ? message() : message; const value = provided ? `Invariant failed: ${provided}` : 'Invariant failed'; if (!provided || !BENIGN.has(String(provided))) { // eslint-disable-next-line no-console console.error('[CRAFT INVARIANT]', value); // eslint-disable-next-line no-console console.error(new Error('stack-only').stack); } throw new Error(value); }