| 'use strict' | 
| module.exports = Base => class extends Base { | 
|   warn (code, message, data = {}) { | 
|     if (this.file) { | 
|       data.file = this.file | 
|     } | 
|     if (this.cwd) { | 
|       data.cwd = this.cwd | 
|     } | 
|     data.code = message instanceof Error && message.code || code | 
|     data.tarCode = code | 
|     if (!this.strict && data.recoverable !== false) { | 
|       if (message instanceof Error) { | 
|         data = Object.assign(message, data) | 
|         message = message.message | 
|       } | 
|       this.emit('warn', data.tarCode, message, data) | 
|     } else if (message instanceof Error) { | 
|       this.emit('error', Object.assign(message, data)) | 
|     } else { | 
|       this.emit('error', Object.assign(new Error(`${code}: ${message}`), data)) | 
|     } | 
|   } | 
| } |