sitesmith: alias tiny-invariant to a diagnostic shim
The prod build of tiny-invariant strips all failure messages, leaving us with bare 'Error: Invariant failed' and no actionable info. Aliasing the package to a shim that always emits the message + a stack-trace console.error before throwing — so the next Craft.js invariant we hit tells us which assertion (ERROR_NOT_IN_RESOLVER, ERROR_NOPARENT, ERROR_INVALID_NODE_ID, etc.) is actually failing. Temporary; will revert once the Sitesmith apply flow is stable.
This commit is contained in:
17
craft/src/utils/tiny-invariant-shim.ts
Normal file
17
craft/src/utils/tiny-invariant-shim.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
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);
|
||||||
|
throw new Error(value);
|
||||||
|
}
|
||||||
@@ -8,6 +8,9 @@ export default defineConfig({
|
|||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
'@': path.resolve(__dirname, './src'),
|
'@': path.resolve(__dirname, './src'),
|
||||||
|
// Diagnostic: replace tiny-invariant with a shim that always logs the
|
||||||
|
// failure message (the upstream prod build strips it).
|
||||||
|
'tiny-invariant': path.resolve(__dirname, './src/utils/tiny-invariant-shim.ts'),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
build: {
|
build: {
|
||||||
|
|||||||
Reference in New Issue
Block a user