@@ -15,6 +15,15 @@ and limitations under the License.
15
15
16
16
"use strict" ;
17
17
var fs = require ( "fs" ) ;
18
+ function pipeExists ( name ) {
19
+ try {
20
+ fs . statSync ( name ) ;
21
+ return true ;
22
+ }
23
+ catch ( e ) {
24
+ return false ;
25
+ }
26
+ }
18
27
function createCancellationToken ( args ) {
19
28
var cancellationPipeName ;
20
29
for ( var i = 0 ; i < args . length - 1 ; i ++ ) {
@@ -24,18 +33,39 @@ function createCancellationToken(args) {
24
33
}
25
34
}
26
35
if ( ! cancellationPipeName ) {
27
- return { isCancellationRequested : function ( ) { return false ; } } ;
36
+ return {
37
+ isCancellationRequested : function ( ) { return false ; } ,
38
+ setRequest : function ( _requestId ) { return void 0 ; } ,
39
+ resetRequest : function ( _requestId ) { return void 0 ; }
40
+ } ;
28
41
}
29
- return {
30
- isCancellationRequested : function ( ) {
31
- try {
32
- fs . statSync ( cancellationPipeName ) ;
33
- return true ;
34
- }
35
- catch ( e ) {
36
- return false ;
37
- }
42
+ if ( cancellationPipeName . charAt ( cancellationPipeName . length - 1 ) === "*" ) {
43
+ var namePrefix_1 = cancellationPipeName . slice ( 0 , - 1 ) ;
44
+ if ( namePrefix_1 . length === 0 || namePrefix_1 . indexOf ( "*" ) >= 0 ) {
45
+ throw new Error ( "Invalid name for template cancellation pipe: it should have length greater than 2 characters and contain only one '*'." ) ;
38
46
}
39
- } ;
47
+ var perRequestPipeName_1 ;
48
+ var currentRequestId_1 ;
49
+ return {
50
+ isCancellationRequested : function ( ) { return perRequestPipeName_1 !== undefined && pipeExists ( perRequestPipeName_1 ) ; } ,
51
+ setRequest : function ( requestId ) {
52
+ currentRequestId_1 = currentRequestId_1 ;
53
+ perRequestPipeName_1 = namePrefix_1 + requestId ;
54
+ } ,
55
+ resetRequest : function ( requestId ) {
56
+ if ( currentRequestId_1 !== requestId ) {
57
+ throw new Error ( "Mismatched request id, expected " + currentRequestId_1 + ", actual " + requestId ) ;
58
+ }
59
+ perRequestPipeName_1 = undefined ;
60
+ }
61
+ } ;
62
+ }
63
+ else {
64
+ return {
65
+ isCancellationRequested : function ( ) { return pipeExists ( cancellationPipeName ) ; } ,
66
+ setRequest : function ( _requestId ) { return void 0 ; } ,
67
+ resetRequest : function ( _requestId ) { return void 0 ; }
68
+ } ;
69
+ }
40
70
}
41
71
module . exports = createCancellationToken ;
0 commit comments