UNPKG

nodulator

Version:

Complete NodeJS Framework for Restfull APIs

125 lines (107 loc) 3.92 kB
/* * Copyright 2014 the original author or authors * @license MIT, see LICENSE.txt for details * * @author Scott Andrews */ (function (define) { 'use strict'; var undef; define(function (require) { /** * Plain JS Object containing properties that represent an HTTP request. * * Depending on the capabilities of the underlying client, a request * may be cancelable. If a request may be canceled, the client will add * a canceled flag and cancel function to the request object. Canceling * the request will put the response into an error state. * * @field {string} [method='GET'] HTTP method, commonly GET, POST, PUT, DELETE or HEAD * @field {string|UrlBuilder} [path=''] path template with optional path variables * @field {Object} [params] parameters for the path template and query string * @field {Object} [headers] custom HTTP headers to send, in addition to the clients default headers * @field [entity] the HTTP entity, common for POST or PUT requests * @field {boolean} [canceled] true if the request has been canceled, set by the client * @field {Function} [cancel] cancels the request if invoked, provided by the client * @field {Client} [originator] the client that first handled this request, provided by the interceptor * * @class Request */ /** * Plain JS Object containing properties that represent an HTTP response * * @field {Object} [request] the request object as received by the root client * @field {Object} [raw] the underlying request object, like XmlHttpRequest in a browser * @field {number} [status.code] status code of the response (i.e. 200, 404) * @field {string} [status.text] status phrase of the response * @field {Object] [headers] response headers hash of normalized name, value pairs * @field [entity] the response body * * @class Response */ /** * HTTP client particularly suited for RESTful operations. * * @field {function} wrap wraps this client with a new interceptor returning the wrapped client * * @param {Request} the HTTP request * @returns {ResponsePromise<Response>} a promise the resolves to the HTTP response * * @class Client */ /** * Extended when.js Promises/A+ promise with HTTP specific helpers *q * @method entity promise for the HTTP entity * @method status promise for the HTTP status code * @method headers promise for the HTTP response headers * @method header promise for a specific HTTP response header * * @class ResponsePromise * @extends Promise */ var client, target, platformDefault; client = require('../client'); /** * Make a request with the default client * @param {Request} the HTTP request * @returns {Promise<Response>} a promise the resolves to the HTTP response */ function defaultClient() { return target.apply(undef, arguments); } /** * Change the default client * @param {Client} client the new default client */ defaultClient.setDefaultClient = function setDefaultClient(client) { target = client; }; /** * Obtain a direct reference to the current default client * @returns {Client} the default client */ defaultClient.getDefaultClient = function getDefaultClient() { return target; }; /** * Reset the default client to the platform default */ defaultClient.resetDefaultClient = function resetDefaultClient() { target = platformDefault; }; /** * @private */ defaultClient.setPlatformDefaultClient = function setPlatformDefaultClient(client) { if (platformDefault) { throw new Error('Unable to redefine platformDefaultClient'); } target = platformDefault = client; }; return client(defaultClient); }); }( typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); } // Boilerplate for AMD and Node ));