From dc0db579e135f2c8483ec5e51e6304184af249d5 Mon Sep 17 00:00:00 2001 From: Wim Looman Date: Mon, 12 Jan 2015 13:36:12 +1300 Subject: [PATCH 1/3] Add rest interceptor definitions --- rest/rest-tests.ts | 29 +++++++++++++ rest/rest.d.ts | 102 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 128 insertions(+), 3 deletions(-) diff --git a/rest/rest-tests.ts b/rest/rest-tests.ts index b19416c11..e5ca243d6 100644 --- a/rest/rest-tests.ts +++ b/rest/rest-tests.ts @@ -1,8 +1,22 @@ /// import rest = require('rest'); + +import defaultRequest = require('rest/interceptor/defaultRequest'); +import hateoas = require('rest/interceptor/hateoas'); +import location = require('rest/interceptor/location'); import mime = require('rest/interceptor/mime'); +import pathPrefix = require('rest/interceptor/pathPrefix'); +import basicAuth = require('rest/interceptor/basicAuth'); +import oAuth = require('rest/interceptor/oAuth'); +import csrf = require('rest/interceptor/csrf'); import errorCode = require('rest/interceptor/errorCode'); +import retry = require('rest/interceptor/retry'); +import timeout = require('rest/interceptor/timeout'); +import jsonp = require('rest/interceptor/jsonp'); +import xdomain = require('rest/interceptor/ie/xdomain'); +import xhr = require('rest/interceptor/ie/xhr'); + import registry = require('rest/mime/registry'); rest('/').then(function(response) { @@ -38,3 +52,18 @@ registry.register('application/vnd.com.example', { } }); +client = rest + .wrap(defaultRequest) + .wrap(hateoas) + .wrap(location) + .wrap(mime) + .wrap(pathPrefix) + .wrap(basicAuth) + .wrap(oAuth) + .wrap(csrf) + .wrap(errorCode) + .wrap(retry) + .wrap(timeout) + .wrap(jsonp) + .wrap(xdomain) + .wrap(xhr); diff --git a/rest/rest.d.ts b/rest/rest.d.ts index 3bec656c3..e3b6fed3a 100644 --- a/rest/rest.d.ts +++ b/rest/rest.d.ts @@ -62,12 +62,28 @@ declare module "rest" { } } -declare module "rest/interceptor/errorCode" { +declare module "rest/interceptor/defaultRequest" { import rest = require("rest"); - var errorCode: rest.Interceptor; + var defaultRequest: rest.Interceptor; - export = errorCode; + export = defaultRequest; +} + +declare module "rest/interceptor/hateoas" { + import rest = require("rest"); + + var hateoas: rest.Interceptor; + + export = hateoas; +} + +declare module "rest/interceptor/location" { + import rest = require("rest"); + + var location: rest.Interceptor; + + export = location; } declare module "rest/interceptor/mime" { @@ -78,6 +94,86 @@ declare module "rest/interceptor/mime" { export = mime; } +declare module "rest/interceptor/pathPrefix" { + import rest = require("rest"); + + var pathPrefix: rest.Interceptor; + + export = pathPrefix; +} + +declare module "rest/interceptor/basicAuth" { + import rest = require("rest"); + + var basicAuth: rest.Interceptor; + + export = basicAuth; +} + +declare module "rest/interceptor/oAuth" { + import rest = require("rest"); + + var oAuth: rest.Interceptor; + + export = oAuth; +} + +declare module "rest/interceptor/csrf" { + import rest = require("rest"); + + var csrf: rest.Interceptor; + + export = csrf; +} + +declare module "rest/interceptor/errorCode" { + import rest = require("rest"); + + var errorCode: rest.Interceptor; + + export = errorCode; +} + +declare module "rest/interceptor/retry" { + import rest = require("rest"); + + var retry: rest.Interceptor; + + export = retry; +} + +declare module "rest/interceptor/timeout" { + import rest = require("rest"); + + var timeout: rest.Interceptor; + + export = timeout; +} + +declare module "rest/interceptor/jsonp" { + import rest = require("rest"); + + var jsonp: rest.Interceptor; + + export = jsonp; +} + +declare module "rest/interceptor/ie/xdomain" { + import rest = require("rest"); + + var xdomain: rest.Interceptor; + + export = xdomain; +} + +declare module "rest/interceptor/ie/xhr" { + import rest = require("rest"); + + var xhr: rest.Interceptor; + + export = xhr; +} + declare module "rest/mime/registry" { import when = require("when"); From e4d5176b09c353d0ae950c9d96f64857ef6671eb Mon Sep 17 00:00:00 2001 From: Wim Looman Date: Mon, 12 Jan 2015 14:47:39 +1300 Subject: [PATCH 2/3] Add definition for custom interceptors --- rest/rest-tests.ts | 65 ++++++++++++++++++++++++++++++++++++---------- rest/rest.d.ts | 33 +++++++++++++++++++++++ 2 files changed, 84 insertions(+), 14 deletions(-) diff --git a/rest/rest-tests.ts b/rest/rest-tests.ts index e5ca243d6..be3887246 100644 --- a/rest/rest-tests.ts +++ b/rest/rest-tests.ts @@ -1,5 +1,6 @@ /// +import when = require('when'); import rest = require('rest'); import defaultRequest = require('rest/interceptor/defaultRequest'); @@ -17,6 +18,7 @@ import jsonp = require('rest/interceptor/jsonp'); import xdomain = require('rest/interceptor/ie/xdomain'); import xhr = require('rest/interceptor/ie/xhr'); +import interceptor = require('rest/interceptor'); import registry = require('rest/mime/registry'); rest('/').then(function(response) { @@ -52,18 +54,53 @@ registry.register('application/vnd.com.example', { } }); +var noop = interceptor({ + init: (config: any) => { + return config; + }, + request: (request: rest.Request, config: any, meta: rest.Meta) => { + return request; + }, + response: (response: rest.Response, config: any, meta: rest.Meta) => { + return response; + }, + success: (response: rest.Response, config: any, meta: rest.Meta) => { + return response; + }, + error: (response: rest.Response, config: any, meta: rest.Meta) => { + return response; + } +}); + +var fail = interceptor({ + success: (response: rest.Response) => when.reject(response), +}); + +var succeed = interceptor({ + error: (response: rest.Response) => when(response), +}); + +var defaulted = interceptor({ + init: (config: any) => { + config.prop = config.prop || 'default-value'; + return config; + }, +}); + client = rest - .wrap(defaultRequest) - .wrap(hateoas) - .wrap(location) - .wrap(mime) - .wrap(pathPrefix) - .wrap(basicAuth) - .wrap(oAuth) - .wrap(csrf) - .wrap(errorCode) - .wrap(retry) - .wrap(timeout) - .wrap(jsonp) - .wrap(xdomain) - .wrap(xhr); + .wrap(defaultRequest) + .wrap(hateoas) + .wrap(location) + .wrap(mime) + .wrap(pathPrefix) + .wrap(basicAuth) + .wrap(oAuth) + .wrap(csrf) + .wrap(errorCode) + .wrap(retry) + .wrap(timeout) + .wrap(jsonp) + .wrap(xdomain) + .wrap(xhr) + .wrap(noop) + .wrap(fail); diff --git a/rest/rest.d.ts b/rest/rest.d.ts index e3b6fed3a..37ecc4675 100644 --- a/rest/rest.d.ts +++ b/rest/rest.d.ts @@ -59,9 +59,42 @@ declare module "rest" { skip(): Client; wrap(interceptor: Interceptor, config?: any): Client; } + + export interface Meta { + client: Client; + arguments: any; + } } } +declare module "rest/interceptor" { + import when = require("when"); + import rest = require("rest"); + + // TODO: These two configs should be merged to use union output types. + + interface Config { + init?: (config: any) => any; + request?: (request: rest.Request, config: any, meta: rest.Meta) => rest.Request; + response?: (response: rest.Response, config: any, meta: rest.Meta) => rest.Response; + success?: (response: rest.Response, config: any, meta: rest.Meta) => rest.Response; + error?: (response: rest.Response, config: any, meta: rest.Meta) => rest.Response; + } + + interface PromiseConfig { + init?: (config: any) => any; + request?: (request: rest.Request, config: any, meta: rest.Meta) => when.Promise; + response?: (response: rest.Response, config: any, meta: rest.Meta) => when.Promise; + success?: (response: rest.Response, config: any, meta: rest.Meta) => when.Promise; + error?: (response: rest.Response, config: any, meta: rest.Meta) => when.Promise; + } + + function interceptor(config: Config): rest.Interceptor; + function interceptor(config: PromiseConfig): rest.Interceptor; + + export = interceptor; +} + declare module "rest/interceptor/defaultRequest" { import rest = require("rest"); From 92249d14aea411d89c3dcab37253efcaab5e9ead Mon Sep 17 00:00:00 2001 From: Wim Looman Date: Mon, 12 Jan 2015 15:28:31 +1300 Subject: [PATCH 3/3] Move interfaces into exported module --- rest/rest.d.ts | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/rest/rest.d.ts b/rest/rest.d.ts index 37ecc4675..d8126b72d 100644 --- a/rest/rest.d.ts +++ b/rest/rest.d.ts @@ -71,27 +71,29 @@ declare module "rest/interceptor" { import when = require("when"); import rest = require("rest"); - // TODO: These two configs should be merged to use union output types. + function interceptor(config: interceptor.Config): rest.Interceptor; + function interceptor(config: interceptor.PromiseConfig): rest.Interceptor; - interface Config { - init?: (config: any) => any; - request?: (request: rest.Request, config: any, meta: rest.Meta) => rest.Request; - response?: (response: rest.Response, config: any, meta: rest.Meta) => rest.Response; - success?: (response: rest.Response, config: any, meta: rest.Meta) => rest.Response; - error?: (response: rest.Response, config: any, meta: rest.Meta) => rest.Response; + module interceptor { + // TODO: These two configs should be merged to use union output types. + + interface Config { + init?: (config: any) => any; + request?: (request: rest.Request, config: any, meta: rest.Meta) => rest.Request; + response?: (response: rest.Response, config: any, meta: rest.Meta) => rest.Response; + success?: (response: rest.Response, config: any, meta: rest.Meta) => rest.Response; + error?: (response: rest.Response, config: any, meta: rest.Meta) => rest.Response; + } + + interface PromiseConfig { + init?: (config: any) => any; + request?: (request: rest.Request, config: any, meta: rest.Meta) => when.Promise; + response?: (response: rest.Response, config: any, meta: rest.Meta) => when.Promise; + success?: (response: rest.Response, config: any, meta: rest.Meta) => when.Promise; + error?: (response: rest.Response, config: any, meta: rest.Meta) => when.Promise; + } } - interface PromiseConfig { - init?: (config: any) => any; - request?: (request: rest.Request, config: any, meta: rest.Meta) => when.Promise; - response?: (response: rest.Response, config: any, meta: rest.Meta) => when.Promise; - success?: (response: rest.Response, config: any, meta: rest.Meta) => when.Promise; - error?: (response: rest.Response, config: any, meta: rest.Meta) => when.Promise; - } - - function interceptor(config: Config): rest.Interceptor; - function interceptor(config: PromiseConfig): rest.Interceptor; - export = interceptor; }