@@ -8,6 +8,7 @@ const renderToString = require('./lib/render-to-string');
88const diff = require ( './lib/diff' ) ;
99const h = require ( './lib/h' ) ;
1010const Indent = require ( './lib/components/indent' ) ;
11+ const Renderer = require ( './lib/renderer' ) ;
1112const Color = require ( './lib/components/color' ) ;
1213const Bold = require ( './lib/components/bold' ) ;
1314const Underline = require ( './lib/components/underline' ) ;
@@ -16,6 +17,7 @@ exports.StringComponent = StringComponent;
1617exports . Component = Component ;
1718exports . h = h ;
1819exports . Indent = Indent ;
20+ exports . Renderer = Renderer ;
1921exports . Color = Color ;
2022exports . Underline = Underline ;
2123exports . Bold = Bold ;
@@ -45,32 +47,15 @@ exports.render = (tree, options) => {
4547
4648 const log = logUpdate . create ( stdout ) ;
4749
48- const context = { } ;
49- let isUnmounted = false ;
50- let currentTree ;
51-
5250 readline . emitKeypressEvents ( stdin ) ;
5351
5452 if ( stdin . isTTY ) {
5553 stdin . setRawMode ( true ) ;
5654 }
5755
58- const update = ( ) => {
59- const nextTree = build ( tree , currentTree , onUpdate , context ) ; // eslint-disable-line no-use-before-define
60- log ( renderToString ( nextTree ) ) ;
61-
62- currentTree = nextTree ;
63- } ;
64-
65- const onUpdate = ( ) => {
66- if ( isUnmounted ) {
67- return ;
68- }
69-
70- update ( ) ;
71- } ;
72-
73- update ( ) ;
56+ const currentTree = new Renderer ( tree ) ;
57+ currentTree . on ( 'update' , log ) ;
58+ currentTree . update ( ) ;
7459
7560 const onKeyPress = ( ch , key ) => {
7661 if ( key . name === 'escape' || ( key . ctrl && key . name === 'c' ) ) {
@@ -80,7 +65,7 @@ exports.render = (tree, options) => {
8065
8166 if ( stdin . isTTY ) {
8267 stdin . on ( 'keypress' , onKeyPress ) ;
83- stdout . on ( 'resize' , update ) ;
68+ stdout . on ( 'resize' , currentTree . update ) ;
8469 }
8570
8671 const consoleMethods = [ 'dir' , 'log' , 'info' , 'warn' , 'error' ] ;
@@ -92,7 +77,7 @@ exports.render = (tree, options) => {
9277 log . clear ( ) ;
9378 log . done ( ) ;
9479 originalFn . apply ( console , args ) ;
95- update ( ) ;
80+ currentTree . update ( ) ;
9681 } ;
9782
9883 console [ method ] . restore = ( ) => {
@@ -101,19 +86,14 @@ exports.render = (tree, options) => {
10186 } ) ;
10287
10388 const exit = ( ) => {
104- if ( isUnmounted ) {
105- return ;
106- }
107-
10889 if ( stdin . isTTY ) {
10990 stdin . setRawMode ( false ) ;
11091 stdin . removeListener ( 'keypress' , onKeyPress ) ;
11192 stdin . pause ( ) ;
112- stdout . removeListener ( 'resize' , update ) ;
93+ stdout . removeListener ( 'resize' , currentTree . update ) ;
11394 }
11495
115- isUnmounted = true ;
116- build ( null , currentTree , onUpdate , context ) ; // eslint-disable-line no-use-before-define
96+ currentTree . unmount ( ) ;
11797 log . done ( ) ;
11898
11999 consoleMethods . forEach ( method => console [ method ] . restore ( ) ) ;
0 commit comments