11import Promise from 'bluebird' ;
22import axios from 'axios' ;
33
4- axios . interceptors . response . use (
5- response => response . data ,
6- error => {
7- const { data } = error . response ;
8- const message = typeof data === 'string' ? data : JSON . stringify ( data ) ;
9- return Promise . reject ( new Error ( message ) ) ;
10- } ,
11- ) ;
4+ axios . interceptors . response . use ( response => response . data ) ;
125
136const request = ( url , process ) => {
147 const tokens = url . split ( '/' ) ;
158 const baseURL = / ^ h t t p s ? : \/ \/ / i. test ( url ) ? '' : '/api' ;
169 return ( ...args ) => {
17- return new Promise ( ( resolve , reject ) => {
18- const mappedURL = baseURL + tokens . map ( ( token , i ) => token . startsWith ( ':' ) ? args . shift ( ) : token ) . join ( '/' ) ;
19- return resolve ( process ( mappedURL , args ) ) ;
20- } ) ;
10+ const mappedURL = baseURL + tokens . map ( ( token , i ) => token . startsWith ( ':' ) ? args . shift ( ) : token ) . join ( '/' ) ;
11+ return Promise . resolve ( process ( mappedURL , args ) ) ;
2112 } ;
2213} ;
2314
2415const GET = URL => {
2516 return request ( URL , ( mappedURL , args ) => {
26- const [ params ] = args ;
27- return axios . get ( mappedURL , { params } ) ;
17+ const [ params , cancelToken ] = args ;
18+ return axios . get ( mappedURL , { params, cancelToken } ) ;
2819 } ) ;
2920} ;
3021
3122const DELETE = URL => {
3223 return request ( URL , ( mappedURL , args ) => {
33- const [ params ] = args ;
34- return axios . delete ( mappedURL , { params } ) ;
24+ const [ params , cancelToken ] = args ;
25+ return axios . delete ( mappedURL , { params, cancelToken } ) ;
3526 } ) ;
3627} ;
3728
3829const POST = URL => {
3930 return request ( URL , ( mappedURL , args ) => {
40- const [ body , params ] = args ;
41- return axios . post ( mappedURL , body , { params } ) ;
31+ const [ body , params , cancelToken ] = args ;
32+ return axios . post ( mappedURL , body , { params, cancelToken } ) ;
4233 } ) ;
4334} ;
4435
4536const PUT = URL => {
4637 return request ( URL , ( mappedURL , args ) => {
47- const [ body , params ] = args ;
48- return axios . put ( mappedURL , body , { params } ) ;
38+ const [ body , params , cancelToken ] = args ;
39+ return axios . put ( mappedURL , body , { params, cancelToken } ) ;
4940 } ) ;
5041} ;
5142
5243const PATCH = URL => {
5344 return request ( URL , ( mappedURL , args ) => {
54- const [ body , params ] = args ;
55- return axios . patch ( mappedURL , body , { params } ) ;
45+ const [ body , params , cancelToken ] = args ;
46+ return axios . patch ( mappedURL , body , { params, cancelToken } ) ;
5647 } ) ;
5748} ;
5849
@@ -72,7 +63,6 @@ const GitHubApi = {
7263 forkGist : POST ( 'https://api.github.com/gists/:id/forks' ) ,
7364} ;
7465
75- let jsWorker = null ;
7666const TracerApi = {
7767 md : ( { code } ) => Promise . resolve ( [ {
7868 tracerKey : '0-MarkdownTracer-Markdown' ,
@@ -83,12 +73,23 @@ const TracerApi = {
8373 method : 'set' ,
8474 args : [ code ] ,
8575 } ] ) ,
86- js : ( { code } ) => new Promise ( ( resolve , reject ) => {
87- if ( jsWorker ) jsWorker . terminate ( ) ;
88- jsWorker = new Worker ( '/api/tracers/js' ) ;
89- jsWorker . onmessage = e => resolve ( e . data ) ;
90- jsWorker . onerror = reject ;
91- jsWorker . postMessage ( code ) ;
76+ js : ( { code } , params , cancelToken ) => new Promise ( ( resolve , reject ) => {
77+ const worker = new Worker ( '/api/tracers/js' ) ;
78+ if ( cancelToken ) {
79+ cancelToken . promise . then ( cancel => {
80+ worker . terminate ( ) ;
81+ reject ( cancel ) ;
82+ } ) ;
83+ }
84+ worker . onmessage = e => {
85+ worker . terminate ( ) ;
86+ resolve ( e . data ) ;
87+ } ;
88+ worker . onerror = error => {
89+ worker . terminate ( ) ;
90+ reject ( error ) ;
91+ } ;
92+ worker . postMessage ( code ) ;
9293 } ) ,
9394 cpp : POST ( '/tracers/cpp' ) ,
9495 java : POST ( '/tracers/java' ) ,
0 commit comments