mirror of
https://github.com/zebrajr/react.git
synced 2025-12-07 12:20:38 +01:00
* Remove "Invariant Violation" from dev errors
When I made the change to compile `invariant` to throw expressions, I
left a small runtime to set the error's `name` property to "Invariant
Violation" to maintain the existing behavior.
I think we can remove it. The argument for keeping it is to preserve
continuity in error logs, but this only affects development errors,
anyway: production error messages are replaced with error codes.
* Pass prod error messages directly to constructor
Updates the `invariant` transform to pass an error message string
directly to the Error constructor, instead of mutating the
message property.
Turns this code:
```js
invariant(condition, 'A %s message that contains %s', adj, noun);
```
into this:
```js
if (!condition) {
throw Error(
__DEV__
? `A ${adj} message that contains ${noun}`
: formatProdErrorMessage(ERR_CODE, adj, noun)
);
}
```
26 lines
823 B
JavaScript
26 lines
823 B
JavaScript
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
*/
|
|
|
|
// Do not require this module directly! Use normal `invariant` calls with
|
|
// template literal strings. The messages will be replaced with error codes
|
|
// during build.
|
|
|
|
function formatProdErrorMessage(code) {
|
|
let url = 'https://reactjs.org/docs/error-decoder.html?invariant=' + code;
|
|
for (let i = 1; i < arguments.length; i++) {
|
|
url += '&args[]=' + encodeURIComponent(arguments[i]);
|
|
}
|
|
return (
|
|
`Minified React error #${code}; visit ${url} for the full message or ` +
|
|
'use the non-minified dev environment for full errors and additional ' +
|
|
'helpful warnings.'
|
|
);
|
|
}
|
|
|
|
export default formatProdErrorMessage;
|