From a1ec51afc3d18bb12c78094526e0d74d170191e2 Mon Sep 17 00:00:00 2001 From: Josh Knapp Date: Sun, 24 May 2026 16:37:08 -0700 Subject: [PATCH] sitesmith: filter known-benign invariants from diagnostic shim MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Craft.js uses several invariants as try/catched control-flow checks (notably isDraggable -> 'A top-level Node cannot be moved' for ROOT and linkedNode children). These fire on every render and are NOT errors — they're how Craft.js asks 'should I attach drag to this node?'. Filter them out of the shim's console.error so only genuinely-broken invariants show up. --- craft/src/utils/tiny-invariant-shim.ts | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/craft/src/utils/tiny-invariant-shim.ts b/craft/src/utils/tiny-invariant-shim.ts index e9ec33b..05becd8 100644 --- a/craft/src/utils/tiny-invariant-shim.ts +++ b/craft/src/utils/tiny-invariant-shim.ts @@ -3,15 +3,26 @@ * 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'; - // Surface the message + stack to the console BEFORE throwing so even - // an uncaught throw leaves a trace we can read. - // eslint-disable-next-line no-console - console.error('[CRAFT INVARIANT]', value); - // eslint-disable-next-line no-console - console.error(new Error('stack-only').stack); + 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); }