8
8
import { experimental , isPromise , json , logging } from '@angular-devkit/core' ;
9
9
import { Observable , from , isObservable , of } from 'rxjs' ;
10
10
import { concatMap , first , map , shareReplay , switchMap , tap } from 'rxjs/operators' ;
11
- import { JobInboundMessageKind , JobOutboundMessageKind } from '../../core/src/experimental/jobs' ;
12
- import { Schema as RealBuilderInput , Target } from './input-schema' ;
11
+ import { JobInboundMessageKind } from '../../core/src/experimental/jobs' ;
12
+ import { Schema as RealBuilderInput , Target as RealTarget } from './input-schema' ;
13
13
import { Schema as RealBuilderOutput } from './output-schema' ;
14
14
import { Schema as RealBuilderProgress } from './progress-schema' ;
15
15
16
- export type Target = Target ;
16
+ export type Target = json . JsonObject & RealTarget ;
17
17
18
18
// Type short hands.
19
19
export type BuilderJobHandler <
@@ -55,7 +55,7 @@ export const VersionSymbol = Symbol.for('@angular-devkit/architect:version');
55
55
56
56
57
57
export interface Builder < OptionT extends json . JsonObject > {
58
- handler : experimental . jobs . JobHandler < boolean , BuilderInput , BuilderOutput > ;
58
+ handler : experimental . jobs . JobHandler < json . JsonObject , BuilderInput , BuilderOutput > ;
59
59
[ BuilderSymbol ] : true ;
60
60
[ VersionSymbol ] : string ;
61
61
}
@@ -154,11 +154,17 @@ async function _scheduleTarget(
154
154
reason : 'initial' ,
155
155
options : overrides ,
156
156
target,
157
- } as BuilderInput ) ;
157
+ } ) ;
158
158
}
159
159
} ) ;
160
160
} else {
161
-
161
+ job . input . next ( {
162
+ currentDirectory : options . workspaceRoot ,
163
+ workspaceRoot : options . currentDirectory ,
164
+ reason : 'schedule' ,
165
+ options : overrides ,
166
+ target,
167
+ } ) ;
162
168
}
163
169
164
170
job . outboundBus . subscribe (
@@ -181,70 +187,42 @@ async function _scheduleTarget(
181
187
export function createBuilder < OptT extends json . JsonObject > (
182
188
fn : BuilderHandlerFn < OptT > ,
183
189
) : Builder < OptT > {
184
- function handler (
185
- options : boolean ,
186
- context : experimental . jobs . JobHandlerContext < boolean , BuilderInput , BuilderOutput > ,
187
- ) {
188
- const description = context . description ;
190
+ const cjh = experimental . jobs . createJobHandler ;
191
+ const handler = cjh < json . JsonObject , BuilderInput , BuilderOutput > ( ( options , context ) => {
189
192
const scheduler = context . scheduler ;
190
-
191
- return new Observable < experimental . jobs . JobOutboundMessage < BuilderOutput > > ( observer => {
192
- const logger = new logging . Logger ( 'job' ) ;
193
- logger . subscribe ( entry => {
194
- observer . next ( {
195
- kind : JobOutboundMessageKind . Log ,
196
- description,
197
- entry,
198
- } ) ;
199
- } ) ;
200
-
201
- context . inboundBus . subscribe ( x => {
202
- if ( x . kind === experimental . jobs . JobInboundMessageKind . Input ) {
203
- const i = x . value ;
204
- const context : BuilderContext = {
205
- workspaceRoot : i . workspaceRoot ,
206
- currentDirectory : i . currentDirectory ,
207
- target : i . target ,
208
- logger,
209
- scheduleTarget ( target : Target , overrides : json . JsonObject ) {
210
- return _scheduleTarget ( target , overrides , scheduler , {
211
- logger,
212
- workspaceRoot : i . workspaceRoot ,
213
- currentDirectory : i . currentDirectory ,
214
- } ) ;
215
- } ,
216
- } ;
217
-
218
- let result = fn ( i . options as OptT , context ) ;
219
-
220
- if ( isPromise ( result ) ) {
221
- result = from ( result ) ;
222
- } else if ( ! isObservable ( result ) ) {
223
- result = of ( result ) ;
224
- }
225
-
226
- result . subscribe (
227
- value => observer . next ( {
228
- kind : experimental . jobs . JobOutboundMessageKind . Output ,
229
- description,
230
- value,
231
- } ) ,
232
- err => observer . error ( err ) ,
233
- ( ) => observer . complete ( ) ,
234
- ) ;
193
+ const logger = context . logger ;
194
+
195
+ return new Observable < BuilderOutput > ( observer => {
196
+ context . input . subscribe ( i => {
197
+ const context : BuilderContext = {
198
+ workspaceRoot : i . workspaceRoot ,
199
+ currentDirectory : i . currentDirectory ,
200
+ target : i . target as Target ,
201
+ logger : logger ,
202
+ scheduleTarget ( target : Target , overrides : json . JsonObject ) {
203
+ return _scheduleTarget ( target , overrides , scheduler , {
204
+ logger : logger . createChild ( '' ) ,
205
+ workspaceRoot : i . workspaceRoot ,
206
+ currentDirectory : i . currentDirectory ,
207
+ } ) ;
208
+ } ,
209
+ } ;
210
+
211
+ let result = fn ( i . options as OptT , context ) ;
212
+
213
+ if ( isPromise ( result ) ) {
214
+ result = from ( result ) ;
215
+ } else if ( ! isObservable ( result ) ) {
216
+ result = of ( result ) ;
235
217
}
236
- } ) ;
237
218
238
- // The job is ready to listen.
239
- observer . next ( {
240
- description,
241
- kind : experimental . jobs . JobOutboundMessageKind . Start ,
219
+ return result . subscribe ( observer ) ;
242
220
} ) ;
243
221
} ) ;
244
- }
222
+ } ) ;
245
223
246
224
return {
247
- handler : Object . assign ( handler , { jobDescription : { } } ) ,
225
+ handler,
248
226
[ BuilderSymbol ] : true ,
249
227
[ VersionSymbol ] : require ( '../package.json' ) . version ,
250
228
} ;
0 commit comments