@@ -186,6 +186,120 @@ this, you can either attach a dummy `.catch(() => { })` handler to
186186` resource.loaded ` , preventing the ` 'unhandledRejection' `  event from being
187187emitted, or you can use the [ ` 'rejectionHandled' ` ] [ ]  event.
188188
189+ ## Event: 'warning'  
190+ 
191+ Emitted whenever Node.js emits a process warning.
192+ 
193+ A process warning is similar to an error in that it describes exceptional 
194+ conditions that are being brought to the user's attention. However, warnings 
195+ are not part of the normal Node.js and JavaScript error handling flow. 
196+ Node.js can emit warnings whenever it detects bad coding practices that could 
197+ lead to sub-optimal application performance, bugs or security vulnerabilities.
198+ 
199+ The event handler for ` 'warning' `  events is called with a single ` warning `  
200+ argument whose value is an ` Error `  object. There are three key properties that 
201+ describe the warning:
202+ 
203+ *  ` name `  - The name of the warning (currently ` Warning `  by default).
204+ *  ` message `  - A system-provided description of the warning.
205+ *  ` stack `  - A stack trace to the location in the code where the warning was
206+   issued.
207+ 
208+ ``` js 
209+ process .on (' warning' warning ) =>  {
210+   console .warn (warning .name );    //  Print the warning name
211+   console .warn (warning .message ); //  Print the warning message
212+   console .warn (warning .stack );   //  Print the stack trace
213+ });
214+ ``` 
215+ 
216+ By default, Node.js will print process warnings to ` stderr ` . The ` --no-warnings ` 
217+ command-line option can be used to suppress the default console output but the
218+ ` 'warning' `  event will still be emitted by the ` process `  object.
219+ 
220+ The following example illustrates the warning that is printed to ` stderr `  when 
221+ too many listeners have been added to an event
222+ 
223+ ``` 
224+ $ node 
225+ > event.defaultMaxListeners = 1; 
226+ > process.on('foo', () => {}); 
227+ > process.on('foo', () => {}); 
228+ > (node:38638) Warning: Possible EventEmitter memory leak detected. 2 foo 
229+ ... listeners added. Use emitter.setMaxListeners() to increase limit 
230+ ``` 
231+ 
232+ In contrast, the following example turns off the default warning output and
233+ adds a custom handler to the ` 'warning' `  event:
234+ 
235+ ``` 
236+ $ node --no-warnings 
237+ > var p = process.on('warning', (warning) => console.warn('Do not do that!')); 
238+ > event.defaultMaxListeners = 1; 
239+ > process.on('foo', () => {}); 
240+ > process.on('foo', () => {}); 
241+ > Do not do that! 
242+ ``` 
243+ 
244+ The ` --trace-warnings `  command-line option can be used to have the default
245+ console output for warnings include the full stack trace of the warning.
246+   
247+ ### Emitting custom warnings  
248+ 
249+ The [ ` process.emitWarning() ` ] [ process_emit_warning ]  method can be used to issue 
250+ custom or application specific warnings.
251+ 
252+ ``` js 
253+ //  Emit a warning using a string...
254+ process .emitWarning (' Something happened!' 
255+   //  Prints: (node 12345) Warning: Something happened!
256+ 
257+ //  Emit a warning using an object...
258+ process .emitWarning (' Something Happened!' ' CustomWarning' 
259+   //  Prints: (node 12345) CustomWarning: Something happened!
260+ 
261+ //  Emit a warning using a custom Error object...
262+ class  CustomWarning  extends  Error  {
263+   constructor (message ) {
264+     super (message);
265+     this .name  =  ' CustomWarning' 
266+     Error .captureStackTrace (this , CustomWarning);
267+   }
268+ }
269+ const  myWarning  =  new  CustomWarning (' Something happened!' 
270+ process .emitWarning (myWarning);
271+   //  Prints: (node 12345) CustomWarning: Something happened!
272+ ``` 
273+ 
274+ ### Emitting custom deprecation warnings  
275+ 
276+ Custom deprecation warnings can be emitted by setting the ` name `  of a custom
277+ warning to ` DeprecationWarning ` . For instance:
278+ 
279+ ``` js 
280+ process .emitWarning (' This API is deprecated' ' DeprecationWarning' 
281+ ``` 
282+ 
283+ Or,
284+ 
285+ ``` js 
286+ const  err  =  new  Error (' This API is deprecated' 
287+ err .name  =  ' DeprecationWarning' 
288+ process .emitWarning (err);
289+ ``` 
290+ 
291+ Launching Node.js using the ` --throw-deprecation `  command line flag will
292+ cause custom deprecation warnings to be thrown as exceptions.
293+ 
294+ Using the ` --trace-deprecation `  command line flag will cause the custom 
295+ deprecation to be printed to ` stderr `  along with the stack trace.
296+ 
297+ Using the ` --no-deprecation `  command line flag will suppress all reporting
298+ of the custom deprecation.
299+ 
300+ The ` *-deprecation `  command line flags only affect warnings that use the name 
301+ ` DeprecationWarning ` .
302+ 
189303## Exit Codes  
190304
191305Node.js will normally exit with a ` 0 `  status code when no more async
@@ -457,6 +571,92 @@ console.log(process.env.TEST);
457571//  => undefined
458572``` 
459573
574+ ## process.emitWarning(warning[ , name] [ , ctor ] )  
575+ 
576+ *  ` warning `  {String | Error} The warning to emit.
577+ *  ` name `  {String} When ` warning `  is a String, ` name `  is the name to use
578+   for the warning. Default: ` Warning ` .
579+ *  ` ctor `  {Function} When ` warning `  is a String, ` ctor `  is an optional
580+   function used to limit the generated stack trace. Default 
581+   ` process.emitWarning ` 
582+ 
583+ The ` process.emitWarning() `  method can be used to emit custom or application 
584+ specific process warnings. These can be listened for by adding a handler to the 
585+ [ ` process.on('warning') ` ] [ process_warning ]  event.
586+ 
587+ ``` js 
588+ //  Emit a warning using a string...
589+ process .emitWarning (' Something happened!' 
590+   //  Emits: (node: 56338) Warning: Something happened!
591+ ``` 
592+ 
593+ ``` 
594+ // Emit a warning using a string and a name... 
595+ process.emitWarning('Something Happened!', 'CustomWarning'); 
596+   // Emits: (node:56338) CustomWarning: Something Happened! 
597+ ``` 
598+ 
599+ In each of the previous examples, an ` Error `  object is generated internally by
600+ ` process.emitWarning() `  and passed through to the 
601+ [ ` process.on('warning') ` ] [ process_warning ]  event.
602+ 
603+ ``` 
604+ process.on('warning', (warning) => { 
605+   console.warn(warning.name); 
606+   console.warn(warning.message); 
607+   console.warn(warning.stack); 
608+ }); 
609+ ``` 
610+ 
611+ If ` warning `  is passed as an ` Error `  object, it will be passed through to the
612+ ` process.on('warning') `  event handler unmodified (and the optional ` name ` 
613+ and ` ctor `  arguments will be ignored):
614+ 
615+ ``` 
616+ // Emit a warning using an Error object... 
617+ const myWarning = new Error('Warning! Something happened!'); 
618+ myWarning.name = 'CustomWarning'; 
619+ 
620+ process.emitWarning(myWarning); 
621+   // Emits: (node:56338) CustomWarning: Warning! Something Happened! 
622+ ``` 
623+ 
624+ A ` TypeError `  is thrown if ` warning `  is anything other than a string or ` Error ` 
625+ object.
626+ 
627+ Note that while process warnings use ` Error `  objects, the process warning
628+ mechanism is ** not**  a replacement for normal error handling mechanisms.
629+ 
630+ The following additional handling is implemented if the warning ` name `  is 
631+ ` DeprecationWarning ` :
632+ 
633+ *  If the ` --throw-deprecation `  command-line flag is used, the deprecation 
634+   warning is thrown as an exception rather than being emitted as an event.
635+ *  If the ` --no-deprecation `  command-line flag is used, the deprecation
636+   warning is suppressed.
637+ *  If the ` --trace-deprecation `  command-line flag is used, the deprecation
638+   warning is printed to ` stderr `  along with the full stack trace.
639+ 
640+ ### Avoiding duplicate warnings  
641+ 
642+ As a best practice, warnings should be emitted only once per process. To do
643+ so, it is recommended to place the ` emitWarning() `  behind a simple boolean
644+ flag as illustrated in the example below:
645+ 
646+ ``` 
647+ var warned = false; 
648+ function emitMyWarning() { 
649+   if (!warned) { 
650+     process.emitWarning('Only warn once!'); 
651+     warned = true; 
652+   } 
653+ } 
654+ emitMyWarning(); 
655+   // Emits: (node: 56339) Warning: Only warn once! 
656+ emitMyWarning(); 
657+   // Emits nothing 
658+ ``` 
659+ 
460660## process.execArgv  
461661
462662This is the set of Node.js-specific command line options from the
@@ -1098,4 +1298,6 @@ Will print something like:
10981298[ Signal Events ] : #process_signal_events 
10991299[ Stream compatibility ] : stream.html#stream_compatibility_with_older_node_js_versions 
11001300[ the tty docs ] : tty.html#tty_tty 
1101- [ `JSON.stringify()` ] : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify 
1301+ [ `JSON.stringify()` ] : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify 
1302+ [ process_warning ] : #process_event_warning 
1303+ [ process_emit_warning ] : #process_emitwarning_warning_name_ctor 
0 commit comments