2025-05-16 21:49:07 +08:00
const stripVTControlCharacters = require ( "strip-ansi" ) ;
2019-06-05 00:33:55 +08:00
2019-08-01 14:18:45 +08:00
module . exports = ( stdio , tty ) => {
2019-06-05 00:33:55 +08:00
let logs = [ ] ;
const write = stdio . write ;
2019-08-01 14:18:45 +08:00
const isTTY = stdio . isTTY ;
2019-06-05 00:33:55 +08:00
2020-03-29 06:10:15 +08:00
stdio . write = function ( str ) {
2019-06-05 00:33:55 +08:00
logs . push ( str ) ;
} ;
2019-08-01 14:18:45 +08:00
if ( tty !== undefined ) stdio . isTTY = tty ;
2019-06-05 00:33:55 +08:00
return {
data : logs ,
reset : ( ) => ( logs = [ ] ) ,
2024-07-31 11:31:11 +08:00
toString : ( ) =>
2025-05-16 21:49:07 +08:00
stripVTControlCharacters ( logs . join ( "" ) )
2025-02-27 23:43:07 +08:00
. replace (
/\([^)]+\) (\[[^\]]+\]\s*)?(Deprecation|Experimental)Warning.+(\n\(Use .node.+\))?(\n(\s|BREAKING CHANGE).*)*(\n\s+at .*)*\n?/g ,
""
)
// Ignore deprecated `import * as pkg from "file.json" assert { type: "json" };`
. replace (
/\([^)]+\) (\[[^\]]+\]\s*)?(V8:).* 'assert' is deprecated in import statements and support will be removed in a future version; use 'with' instead\n/g ,
""
) ,
2019-06-05 00:33:55 +08:00
2024-07-31 11:31:11 +08:00
toStringRaw : ( ) => logs . join ( "" ) ,
2019-06-05 00:33:55 +08:00
restore ( ) {
stdio . write = write ;
2019-08-01 14:18:45 +08:00
stdio . isTTY = isTTY ;
delete require . cache [ require . resolve ( "../../" ) ] ;
delete require . cache [
require . resolve ( "../../lib/node/NodeEnvironmentPlugin" )
] ;
delete require . cache [ require . resolve ( "../../lib/node/nodeConsole" ) ] ;
2019-06-05 00:33:55 +08:00
}
} ;
} ;