warning.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /* eslint-disable no-console */
  2. var warned = {};
  3. var preWarningFns = [];
  4. /**
  5. * Pre warning enable you to parse content before console.error.
  6. * Modify to null will prevent warning.
  7. */
  8. export var preMessage = function preMessage(fn) {
  9. preWarningFns.push(fn);
  10. };
  11. /**
  12. * Warning if condition not match.
  13. * @param valid Condition
  14. * @param message Warning message
  15. * @example
  16. * ```js
  17. * warning(false, 'some error'); // print some error
  18. * warning(true, 'some error'); // print nothing
  19. * warning(1 === 2, 'some error'); // print some error
  20. * ```
  21. */
  22. export function warning(valid, message) {
  23. if (process.env.NODE_ENV !== 'production' && !valid && console !== undefined) {
  24. var finalMessage = preWarningFns.reduce(function (msg, preMessageFn) {
  25. return preMessageFn(msg !== null && msg !== void 0 ? msg : '', 'warning');
  26. }, message);
  27. if (finalMessage) {
  28. console.error("Warning: ".concat(finalMessage));
  29. }
  30. }
  31. }
  32. /** @see Similar to {@link warning} */
  33. export function note(valid, message) {
  34. if (process.env.NODE_ENV !== 'production' && !valid && console !== undefined) {
  35. var finalMessage = preWarningFns.reduce(function (msg, preMessageFn) {
  36. return preMessageFn(msg !== null && msg !== void 0 ? msg : '', 'note');
  37. }, message);
  38. if (finalMessage) {
  39. console.warn("Note: ".concat(finalMessage));
  40. }
  41. }
  42. }
  43. export function resetWarned() {
  44. warned = {};
  45. }
  46. export function call(method, valid, message) {
  47. if (!valid && !warned[message]) {
  48. method(false, message);
  49. warned[message] = true;
  50. }
  51. }
  52. /** @see Same as {@link warning}, but only warn once for the same message */
  53. export function warningOnce(valid, message) {
  54. call(warning, valid, message);
  55. }
  56. /** @see Same as {@link warning}, but only warn once for the same message */
  57. export function noteOnce(valid, message) {
  58. call(note, valid, message);
  59. }
  60. warningOnce.preMessage = preMessage;
  61. warningOnce.resetWarned = resetWarned;
  62. warningOnce.noteOnce = noteOnce;
  63. export default warningOnce;