@@ -2,6 +2,7 @@ import { Injectable } from "@angular/core";
22import {
33 Http ,
44 ConnectionBackend ,
5+ Request ,
56 RequestOptions ,
67 RequestOptionsArgs ,
78 ResponseOptions ,
@@ -24,32 +25,59 @@ export class NSHttp extends Http {
2425 super ( backend , defaultOptions ) ;
2526 }
2627
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+
2740 /**
2841 * Performs a request with `get` http method.
29- * Uses a local file if `~/` resource is requested.
3042 */
3143 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 ) ;
4946 } else {
5047 return super . get ( url , options ) ;
5148 }
5249 }
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 ( "/" , "" ) ;
5381}
5482
5583function responseOptions ( body : string | Object , status : number , url : string ) : Response {
0 commit comments