1- const Step = require ( './step' ) ;
2- const { MetaStep } = require ( './step' ) ;
3- const container = require ( './container' ) ;
4- const { methodsOfObject } = require ( './utils' ) ;
5- const recorder = require ( './recorder' ) ;
6- const event = require ( './event' ) ;
7- const store = require ( './store' ) ;
8- const output = require ( './output' ) ;
1+ const Step = require ( './step' )
2+ const MetaStep = require ( './step/meta' )
3+ const recordStep = require ( './step/record' )
4+ const container = require ( './container' )
5+ const { methodsOfObject } = require ( './utils' )
6+ const { TIMEOUT_ORDER } = require ( './step/timeout' )
7+ const recorder = require ( './recorder' )
8+ const event = require ( './event' )
9+ const store = require ( './store' )
10+ const output = require ( './output' )
911
1012/**
1113 * @interface
@@ -21,13 +23,13 @@ class Actor {
2123 * ⚠️ returns a promise which is synchronized internally by recorder
2224 */
2325 async say ( msg , color = 'cyan' ) {
24- const step = new Step ( 'say' , 'say' ) ;
25- step . status = 'passed' ;
26+ const step = new Step ( 'say' , 'say' )
27+ step . status = 'passed'
2628 return recordStep ( step , [ msg ] ) . then ( ( ) => {
2729 // this is backward compatibility as this event may be used somewhere
28- event . emit ( event . step . comment , msg ) ;
29- output . say ( msg , `${ color } ` ) ;
30- } ) ;
30+ event . emit ( event . step . comment , msg )
31+ output . say ( msg , `${ color } ` )
32+ } )
3133 }
3234
3335 /**
@@ -38,14 +40,14 @@ class Actor {
3840 * @inner
3941 */
4042 limitTime ( timeout ) {
41- if ( ! store . timeouts ) return this ;
43+ if ( ! store . timeouts ) return this
4244
4345 event . dispatcher . prependOnceListener ( event . step . before , step => {
44- output . log ( `Timeout to ${ step } : ${ timeout } s` ) ;
45- step . setTimeout ( timeout * 1000 , Step . TIMEOUT_ORDER . codeLimitTime ) ;
46- } ) ;
46+ output . log ( `Timeout to ${ step } : ${ timeout } s` )
47+ step . setTimeout ( timeout * 1000 , TIMEOUT_ORDER . codeLimitTime )
48+ } )
4749
48- return this ;
50+ return this
4951 }
5052
5153 /**
@@ -55,11 +57,9 @@ class Actor {
5557 * @inner
5658 */
5759 retry ( opts ) {
58- if ( opts === undefined ) opts = 1 ;
59- recorder . retry ( opts ) ;
60- // remove retry once the step passed
61- recorder . add ( ( ) => event . dispatcher . once ( event . step . finished , ( ) => recorder . retries . pop ( ) ) ) ;
62- return this ;
60+ const retryStep = require ( './step/retry' )
61+ retryStep ( opts )
62+ return this
6363 }
6464}
6565
@@ -70,102 +70,54 @@ class Actor {
7070 * @ignore
7171 */
7272module . exports = function ( obj = { } ) {
73- const actor = container . actor ( ) || new Actor ( ) ;
73+ const actor = container . actor ( ) || new Actor ( )
7474
7575 // load all helpers once container initialized
7676 container . started ( ( ) => {
77- const translation = container . translation ( ) ;
78- const helpers = container . helpers ( ) ;
77+ const translation = container . translation ( )
78+ const helpers = container . helpers ( )
7979
8080 // add methods from enabled helpers
8181 Object . values ( helpers ) . forEach ( helper => {
8282 methodsOfObject ( helper , 'Helper' )
8383 . filter ( method => method !== 'constructor' && method [ 0 ] !== '_' )
8484 . forEach ( action => {
85- const actionAlias = translation . actionAliasFor ( action ) ;
85+ const actionAlias = translation . actionAliasFor ( action )
8686 if ( ! actor [ action ] ) {
8787 actor [ action ] = actor [ actionAlias ] = function ( ) {
88- const step = new Step ( helper , action ) ;
88+ const step = new Step ( helper , action )
8989 if ( translation . loaded ) {
90- step . name = actionAlias ;
91- step . actor = translation . I ;
90+ step . name = actionAlias
91+ step . actor = translation . I
9292 }
9393 // add methods to promise chain
94- return recordStep ( step , Array . from ( arguments ) ) ;
95- } ;
94+ return recordStep ( step , Array . from ( arguments ) )
95+ }
9696 }
97- } ) ;
98- } ) ;
97+ } )
98+ } )
9999
100100 // add translated custom steps from actor
101101 Object . keys ( obj ) . forEach ( key => {
102- const actionAlias = translation . actionAliasFor ( key ) ;
102+ const actionAlias = translation . actionAliasFor ( key )
103103 if ( ! actor [ actionAlias ] ) {
104- actor [ actionAlias ] = actor [ key ] ;
104+ actor [ actionAlias ] = actor [ key ]
105105 }
106- } ) ;
106+ } )
107107
108108 container . append ( {
109109 support : {
110110 I : actor ,
111111 } ,
112- } ) ;
113- } ) ;
112+ } )
113+ } )
114114 // store.actor = actor;
115115 // add custom steps from actor
116116 Object . keys ( obj ) . forEach ( key => {
117- const ms = new MetaStep ( 'I' , key ) ;
118- ms . setContext ( actor ) ;
119- actor [ key ] = ms . run . bind ( ms , obj [ key ] ) ;
120- } ) ;
117+ const ms = new MetaStep ( 'I' , key )
118+ ms . setContext ( actor )
119+ actor [ key ] = ms . run . bind ( ms , obj [ key ] )
120+ } )
121121
122- return actor ;
123- } ;
124-
125- function recordStep ( step , args ) {
126- step . status = 'queued' ;
127- step . setArguments ( args ) ;
128-
129- // run async before step hooks
130- event . emit ( event . step . before , step ) ;
131-
132- const task = `${ step . name } : ${ step . humanizeArgs ( ) } ` ;
133- let val ;
134-
135- // run step inside promise
136- recorder . add (
137- task ,
138- ( ) => {
139- if ( ! step . startTime ) {
140- // step can be retries
141- event . emit ( event . step . started , step ) ;
142- step . startTime = Date . now ( ) ;
143- }
144- return ( val = step . run ( ...args ) ) ;
145- } ,
146- false ,
147- undefined ,
148- step . getTimeout ( ) ,
149- ) ;
150-
151- event . emit ( event . step . after , step ) ;
152-
153- recorder . add ( 'step passed' , ( ) => {
154- step . endTime = Date . now ( ) ;
155- event . emit ( event . step . passed , step , val ) ;
156- event . emit ( event . step . finished , step ) ;
157- } ) ;
158-
159- recorder . catchWithoutStop ( err => {
160- step . status = 'failed' ;
161- step . endTime = Date . now ( ) ;
162- event . emit ( event . step . failed , step ) ;
163- event . emit ( event . step . finished , step ) ;
164- throw err ;
165- } ) ;
166-
167- recorder . add ( 'return result' , ( ) => val ) ;
168- // run async after step hooks
169-
170- return recorder . promise ( ) ;
122+ return actor
171123}
0 commit comments