@@ -2,6 +2,7 @@ import { Injectable } from "@angular/core";
2
2
import {
3
3
Http ,
4
4
ConnectionBackend ,
5
+ Request ,
5
6
RequestOptions ,
6
7
RequestOptionsArgs ,
7
8
ResponseOptions ,
@@ -24,32 +25,59 @@ export class NSHttp extends Http {
24
25
super ( backend , defaultOptions ) ;
25
26
}
26
27
28
+ /**
29
+ * Performs a request with `request` http method.
30
+ */
31
+ request ( req : string | Request , options ?: RequestOptionsArgs ) : Observable < Response > {
32
+ const urlString = typeof req === "string" ? req : req . url ;
33
+ if ( isLocalRequest ( urlString ) ) {
34
+ return this . _requestLocalUrl ( urlString ) ;
35
+ } else {
36
+ return super . request ( req , options ) ;
37
+ }
38
+ }
39
+
27
40
/**
28
41
* Performs a request with `get` http method.
29
- * Uses a local file if `~/` resource is requested.
30
42
*/
31
43
get ( url : string , options ?: RequestOptionsArgs ) : Observable < Response > {
32
- if ( url . indexOf ( "~" ) === 0 || url . indexOf ( "/" ) === 0 ) {
33
- // normalize url
34
- url = url . replace ( "~" , "" ) . replace ( "/" , "" ) ;
35
- // request from local app resources
36
- return Observable . fromPromise < Response > ( new Promise ( ( resolve , reject ) => {
37
- let app = this . nsFileSystem . currentApp ( ) ;
38
- let localFile = app . getFile ( url ) ;
39
- if ( localFile ) {
40
- localFile . readText ( ) . then ( ( data ) => {
41
- resolve ( responseOptions ( data , 200 , url ) ) ;
42
- } , ( err : Object ) => {
43
- reject ( responseOptions ( err , 400 , url ) ) ;
44
- } ) ;
45
- } else {
46
- reject ( responseOptions ( "Not Found" , 404 , url ) ) ;
47
- }
48
- } ) ) ;
44
+ if ( isLocalRequest ( url ) ) {
45
+ return this . _requestLocalUrl ( url ) ;
49
46
} else {
50
47
return super . get ( url , options ) ;
51
48
}
52
49
}
50
+
51
+ /**
52
+ * Uses a local file if `~/` resource is requested.
53
+ * @param url
54
+ */
55
+ private _requestLocalUrl ( url : string ) : Observable < Response > {
56
+ // normalize url
57
+ url = normalizeLocalUrl ( url ) ;
58
+ // request from local app resources
59
+ return Observable . fromPromise < Response > ( new Promise ( ( resolve , reject ) => {
60
+ let app = this . nsFileSystem . currentApp ( ) ;
61
+ let localFile = app . getFile ( url ) ;
62
+ if ( localFile ) {
63
+ localFile . readText ( ) . then ( ( data ) => {
64
+ resolve ( responseOptions ( data , 200 , url ) ) ;
65
+ } , ( err : Object ) => {
66
+ reject ( responseOptions ( err , 400 , url ) ) ;
67
+ } ) ;
68
+ } else {
69
+ reject ( responseOptions ( "Not Found" , 404 , url ) ) ;
70
+ }
71
+ } ) ) ;
72
+ }
73
+ }
74
+
75
+ function isLocalRequest ( url : string ) : boolean {
76
+ return url . indexOf ( "~" ) === 0 || url . indexOf ( "/" ) === 0 ;
77
+ }
78
+
79
+ function normalizeLocalUrl ( url : string ) : string {
80
+ return url . replace ( "~" , "" ) . replace ( "/" , "" ) ;
53
81
}
54
82
55
83
function responseOptions ( body : string | Object , status : number , url : string ) : Response {
0 commit comments