packages feed

rest-gen 0.17.1.2 → 0.17.1.3

raw patch · 6 files changed

+229/−200 lines, 6 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

CHANGELOG.md view
@@ -1,10 +1,21 @@ # Changelog -### 0.17.1.2+#### 0.17.1.3 +* Javascript: generate new API instance every time. Some properties+  were written to the prototype of the API object, and in Node,+  importing it again could cause mixups of this data. Now every+  instantiation of the API is a new object. This should have no impact+  on user code, unless you're checking the API type with `instanceof`,+  in which case it will now always return false.++#### 0.17.1.2+ * Javascript: fix rare crash in error path.+* Allow `HUnit 1.3.*`+* Allow `process 1.3.*`. -### 0.17.1.1+#### 0.17.1.1  * JavaScript/NodeJS: Use the received content-type instead of the accept header to decide whether to parse json. * Allow `vector 0.11.*`
− files/Javascript/base.js
@@ -1,191 +0,0 @@-// in nodejs, global is an object-// in normal browser environment, global is undefined-// in webpack, global is set to window-var isNodeJs   = typeof global !== "undefined" && global.window === undefined;-var isCommonJs = typeof module === "object" && module && typeof module.exports === "object";--// require, that the nodejs will handle, but will remain not processed by webpack and the like-var obfuscatedRequire = function (moduleName)-{-  return module["r" + "equire"](moduleName);-}--var $apinamespace$ =-  function (url, secureUrl, modifyRequest)-  {-    var self = this;-    var postfix          = '/v' + this.version + '/';-    var contextUrl       = url + postfix;-    var secureContextUrl = (secureUrl || url.replace(/^http:/, "https:")) + postfix;--    this.cookieJar = isNodeJs ? obfuscatedRequire('request').jar() : undefined;--    if(!modifyRequest) modifyRequest = function (req) { return req; };--    var finalModifyRequest = function (req)-    {-      if (isNodeJs) req.jar = self.cookieJar;-      return modifyRequest(req);-    }--    $apinamespace$.setContext(this, contextUrl, secureContextUrl, finalModifyRequest);-  };--var jqFun;-if (isNodeJs)-{-  // Export as Node module.-  module.exports = $apinamespace$;--  $apinamespace$.ajaxCall = nodeRequest;-}-else-{-  if (isCommonJs) {-    // Export as CommonJs-    module.exports = $apinamespace$;-    jqFun = function () { return require("jquery"); };-  } else if (typeof define === "function" && define.amd) {-    // Export as AMD.-    define("$apinamespace$", [], function () { return $apinamespace$; });-    jqFun = function () { return window.$dollar$; };-  } else {-    // Export as global.-    window.$apinamespace$ = $apinamespace$;-    jqFun = function () { return window.$dollar$; };-  }--  $apinamespace$.ajaxCall = jQueryRequest;-}--$apinamespace$.addObject = function (obj1, obj2)-{-  for (var fld in obj2)-    obj1[fld] = obj2[fld];-};--$apinamespace$.defaultAjaxOptions = {};-$apinamespace$.defaultHeaders = {};--function jQueryRequest (method, url, params, success, error, contentType, acceptHeader, data, callOpts, modifyRequest)-{-  var q = window.Q || function (a) { return a };-  var jq = jqFun();--  var headers = jq.extend(true, {}, $apinamespace$.defaultHeaders);-  $apinamespace$.addObject(headers, { Accept : acceptHeader });--  var callData =-    { type        : method-    , url         : url + (params ? '?' + jq.param(params) : '')-    , cache       : false-    , success     : success || function () {}-    , error       : error || function () {}-    , contentType : contentType-    , headers     : headers-    , xhrFields   : { withCredentials: true }-    , data        : data || []-    };--  callData = modifyRequest(callData);--  $apinamespace$.addObject(callData, $apinamespace$.defaultAjaxOptions);-  $apinamespace$.addObject(callData, callOpts);--  return q(jq.ajax(callData));-}--function nodeRequest (method, url, params, onSuccess, onError, contentType, acceptHeader, data, callOpts, modifyRequest)-{-  var allParams = {};-  $apinamespace$.addObject(allParams, params);--  if (method === "GET" || method === "HEAD")-    // Avoid cached API responses.-    allParams._ = Date.now();--  var headers = { "Content-type" : contentType-                , "Accept"       : acceptHeader-                };--  $apinamespace$.addObject(headers, $apinamespace$.defaultHeaders);--  var callData =-    { url     : url-    , qs      : allParams-    , method  : method-    , headers : headers-    };--  if (data) callData.body = data;--  callData = modifyRequest(callData);--  $apinamespace$.addObject(callData, $apinamespace$.defaultAjaxOptions);-  $apinamespace$.addObject(callData, callOpts);--  return require("q").Promise(function (resolve, reject)-  {-    obfuscatedRequire("request")(callData, callback);--    function callback (error, message, body)-    {-      if (message && message.statusCode >= 200 && message.statusCode < 300)-      {-        var parsedResponse = parse(body, message.headers);-        onSuccess && onSuccess(parsedResponse, message);-        resolve(parsedResponse)-      }-      else-      {-        if (!error)-        {-          error = new Error("HTTP request error");-          error.statusCode = message && message.statusCode;-          error.responseBody = body;-        }--        error.response = parse(body, message ? message.headers : {});--        if (onError)-          onError(error);--        reject(error);-      }-    }-  });--  function parse (response, headers)-  {-    if (headers["content-type"] && headers["content-type"].split(";").indexOf("application/json") >= 0)-    {-      var r = response;-      try-      {-        r = JSON.parse(response);-      }-      catch (e)-      {-        return r;-      }-      return r;-    }-    else return response;-  }-}--$apinamespace$.setContext =-  function (obj, url, secureUrl, modifyRequest)-  {-    obj.contextUrl = url;-    obj.secureContextUrl = secureUrl;-    obj.modifyRequest = modifyRequest;-    for (var fld in obj)-    {-      if (obj[fld] != undefined && obj[fld].apiObjectType != undefined && obj[fld].apiObjectType == 'resourceDir')-      {-        var postfix = fld.replace(/([a-z0-9])([A-Z])/g, '$dollar$1-$dollar$2').toLowerCase() + '/';-        $apinamespace$.setContext(obj[fld], url + postfix, secureUrl + postfix, modifyRequest);-      }-    }-  };
+ files/Javascript/epilogue.js view
@@ -0,0 +1,22 @@+  return new $apinamespace$ (url, secureUrl, modifyRequest);+}++var jqFun;+if (isNodeJs)+{+  // Export as Node module.+  module.exports = $apinamespace$;+}+else+{+  if (isCommonJs) {+    // Export as CommonJs+    module.exports = $apinamespace$;+  } else if (typeof define === "function" && define.amd) {+    // Export as AMD.+    define("$apinamespace$", [], function () { return $apinamespace$; });+  } else {+    // Export as global.+    window.$apinamespace$ = $apinamespace$;+  }+}
+ files/Javascript/prelude.js view
@@ -0,0 +1,185 @@+// in nodejs, global is an object+// in normal browser environment, global is undefined+// in webpack, global is set to window+var isNodeJs   = typeof global !== "undefined" && global.window === undefined;+var isCommonJs = typeof module === "object" && module && typeof module.exports === "object";++// require, that the nodejs will handle, but will remain not processed by webpack and the like+var obfuscatedRequire = function (moduleName)+{+  return module["r" + "equire"](moduleName);+}++function $apinamespace$ (url, secureUrl, modifyRequest)+{+  var $apinamespace$ =+    function (url, secureUrl, modifyRequest)+    {+      var self = this;+      var postfix          = '/v' + this.version + '/';+      var contextUrl       = url + postfix;+      var secureContextUrl = (secureUrl || url.replace(/^http:/, "https:")) + postfix;++      this.cookieJar = isNodeJs ? obfuscatedRequire('request').jar() : undefined;++      if(!modifyRequest) modifyRequest = function (req) { return req; };++      var finalModifyRequest = function (req)+      {+        if (isNodeJs) req.jar = self.cookieJar;+        return modifyRequest(req);+      }++      $apinamespace$.setContext(this, contextUrl, secureContextUrl, finalModifyRequest);+    };++  var jqFun;+  if (isNodeJs)+  {+    $apinamespace$.ajaxCall = nodeRequest;+  }+  else+  {+    if (isCommonJs) {+      jqFun = function () { return require("jquery"); };+    } else if (typeof define === "function" && define.amd) {+      jqFun = function () { return window.$dollar$; };+    } else {+      jqFun = function () { return window.$dollar$; };+    }++    $apinamespace$.ajaxCall = jQueryRequest;+  }++  $apinamespace$.addObject = function (obj1, obj2)+  {+    for (var fld in obj2)+      obj1[fld] = obj2[fld];+  };++  $apinamespace$.defaultAjaxOptions = {};+  $apinamespace$.defaultHeaders = {};++  function jQueryRequest (method, url, params, success, error, contentType, acceptHeader, data, callOpts, modifyRequest)+  {+    var q = window.Q || function (a) { return a };+    var jq = jqFun();++    var headers = jq.extend(true, {}, $apinamespace$.defaultHeaders);+    $apinamespace$.addObject(headers, { Accept : acceptHeader });++    var callData =+      { type        : method+      , url         : url + (params ? '?' + jq.param(params) : '')+      , cache       : false+      , success     : success || function () {}+      , error       : error || function () {}+      , contentType : contentType+      , headers     : headers+      , xhrFields   : { withCredentials: true }+      , data        : data || []+      };++    callData = modifyRequest(callData);++    $apinamespace$.addObject(callData, $apinamespace$.defaultAjaxOptions);+    $apinamespace$.addObject(callData, callOpts);++    return q(jq.ajax(callData));+  }++  function nodeRequest (method, url, params, onSuccess, onError, contentType, acceptHeader, data, callOpts, modifyRequest)+  {+    var allParams = {};+    $apinamespace$.addObject(allParams, params);++    if (method === "GET" || method === "HEAD")+      // Avoid cached API responses.+      allParams._ = Date.now();++    var headers = { "Content-type" : contentType+                  , "Accept"       : acceptHeader+                  };++    $apinamespace$.addObject(headers, $apinamespace$.defaultHeaders);++    var callData =+      { url     : url+      , qs      : allParams+      , method  : method+      , headers : headers+      };++    if (data) callData.body = data;++    callData = modifyRequest(callData);++    $apinamespace$.addObject(callData, $apinamespace$.defaultAjaxOptions);+    $apinamespace$.addObject(callData, callOpts);++    return require("q").Promise(function (resolve, reject)+    {+      obfuscatedRequire("request")(callData, callback);++      function callback (error, message, body)+      {+        if (message && message.statusCode >= 200 && message.statusCode < 300)+        {+          var parsedResponse = parse(body, message.headers);+          onSuccess && onSuccess(parsedResponse, message);+          resolve(parsedResponse)+        }+        else+        {+          if (!error)+          {+            error = new Error("HTTP request error");+            error.statusCode = message && message.statusCode;+            error.responseBody = body;+          }++          error.response = parse(body, message ? message.headers : {});++          if (onError)+            onError(error);++          reject(error);+        }+      }+    });++    function parse (response, headers)+    {+      if (headers["content-type"] && headers["content-type"].split(";").indexOf("application/json") >= 0)+      {+        var r = response;+        try+        {+          r = JSON.parse(response);+        }+        catch (e)+        {+          return r;+        }+        return r;+      }+      else return response;+    }+  }++  $apinamespace$.setContext =+    function (obj, url, secureUrl, modifyRequest)+    {+      obj.contextUrl = url;+      obj.secureContextUrl = secureUrl;+      obj.modifyRequest = modifyRequest;+      for (var fld in obj)+      {+        if (obj[fld] != undefined && obj[fld].apiObjectType != undefined && obj[fld].apiObjectType == 'resourceDir')+        {+          var postfix = fld.replace(/([a-z0-9])([A-Z])/g, '$dollar$1-$dollar$2').toLowerCase() + '/';+          $apinamespace$.setContext(obj[fld], url + postfix, secureUrl + postfix, modifyRequest);+        }+      }+    };+
rest-gen.cabal view
@@ -1,5 +1,5 @@ name:                rest-gen-version:             0.17.1.2+version:             0.17.1.3 description:         Documentation and client generation from rest definition. synopsis:            Documentation and client generation from rest definition. maintainer:          code@silk.co@@ -14,7 +14,8 @@   Docs/*.st   Docs/*.js   Docs/*.css-  Javascript/base.js+  Javascript/prelude.js+  Javascript/epilogue.js   Ruby/base.rb extra-source-files:   CHANGELOG.md@@ -61,10 +62,10 @@     , hxt >= 9.2 && < 9.4     , json-schema >= 0.6 && < 0.8     , pretty >= 1.0 && < 1.2-    , process >= 1.0 && < 1.3+    , process >= 1.0 && < 1.4     , rest-core >= 0.35 && < 0.37     , safe >= 0.2 && < 0.4-    , semigroups >= 0.5.0 && < 0.17+    , semigroups >= 0.5 && < 0.18     , scientific >= 0.3.2 && < 0.4     , split >= 0.1 && < 0.3     , text >= 0.11 && < 1.3@@ -81,7 +82,7 @@   ghc-options:       -Wall   build-depends:       base >= 4.5 && < 4.9-    , HUnit == 1.2.*+    , HUnit >= 1.2 && < 1.4     , fclabels >= 1.0.4 && < 2.1     , haskell-src-exts >= 1.15.0 && < 1.17     , rest-core >= 0.35 && < 0.37
src/Rest/Gen/JavaScript.hs view
@@ -20,12 +20,13 @@  mkJsApi :: H.ModuleName -> Bool -> Version -> Router m s -> IO String mkJsApi ns priv ver r =-  do prelude <- liftM (render . setManyAttrib attrs . newSTMP) (readContent "Javascript/base.js")+  do prelude <- liftM (render . setManyAttrib attrs . newSTMP) (readContent "Javascript/prelude.js")+     epilogue <- liftM (render . setManyAttrib attrs . newSTMP) (readContent "Javascript/epilogue.js")      let cod = showCode $ mkStack                 [ unModuleName ns ++ ".prototype.version" .=. string (show ver)                 , mkJsCode (unModuleName ns) priv r                 ]-     return $ mkJsModule (prelude ++ cod)+     return $ mkJsModule (prelude ++ cod ++ epilogue)   where attrs = [("apinamespace", unModuleName ns), ("dollar", "$")]  mkJsModule :: String -> String