Skip to content

Commit 2af6d66

Browse files
Release v1.7.0
1 parent a234815 commit 2af6d66

File tree

6 files changed

+262
-246
lines changed

6 files changed

+262
-246
lines changed

dist/dynamics-web-api-callbacks.js

Lines changed: 136 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/*! dynamics-web-api-callbacks v1.6.15 (c) 2020 Aleksandr Rogov */
1+
/*! dynamics-web-api-callbacks v1.7.0 (c) 2020 Aleksandr Rogov */
22
(function webpackUniversalModuleDefinition(root, factory) {
33
if(typeof exports === 'object' && typeof module === 'object')
44
module.exports = factory();
@@ -958,11 +958,12 @@ function DynamicsWebApi(config) {
958958
if (offset <= fileBytes.length) {
959959
_uploadFileChunk(request, fileBytes, chunkSize, offset, successCallback, errorCallback);
960960
}
961-
962-
successCallback();
961+
else {
962+
successCallback();
963+
}
963964
}
964965

965-
return _makeRequest("PATCH", request, "uploadFile", internalSuccessCallback, errorCallback);
966+
_makeRequest("PATCH", request, "uploadFile", internalSuccessCallback, errorCallback);
966967
};
967968

968969
/**
@@ -988,40 +989,39 @@ function DynamicsWebApi(config) {
988989
internalRequest.url = response.data.location;
989990
delete internalRequest.transferMode;
990991
delete internalRequest.fieldName;
991-
return _uploadFileChunk(internalRequest, request.data, response.data.chunkSize, null, successCallback, errorCallback);
992+
_uploadFileChunk(internalRequest, request.data, response.data.chunkSize, null, successCallback, errorCallback);
992993
}
993994

994-
return _makeRequest("PATCH", internalRequest, "uploadFile", internalSuccessCallback, errorCallback);
995+
_makeRequest("PATCH", internalRequest, "uploadFile", internalSuccessCallback, errorCallback);
995996
};
996997

997-
var _chunkSize = 4194304;
998-
999998
var _downloadFileChunk = function (request, bytesDownloaded, fileSize, data, successCallback, errorCallback) {
1000999
bytesDownloaded = bytesDownloaded || 0;
10011000
fileSize = fileSize || 0;
10021001
data = data || "";
10031002

1004-
request.range = "bytes=" + bytesDownloaded + "-" + (bytesDownloaded + _chunkSize - 1);
1003+
request.range = "bytes=" + bytesDownloaded + "-" + (bytesDownloaded + Utility.downloadChunkSize - 1);
10051004
request.downloadSize = "full";
10061005

10071006
var internalSuccessCallback = function (response) {
10081007
request.url = response.data.location;
10091008
data += response.data.value;
10101009

1011-
bytesDownloaded += _chunkSize;
1010+
bytesDownloaded += Utility.downloadChunkSize;
10121011

10131012
if (bytesDownloaded <= response.data.fileSize) {
10141013
_downloadFileChunk(request, bytesDownloaded, response.data.fileSize, data, successCallback, errorCallback);
10151014
}
1016-
1017-
successCallback({
1018-
fileName: response.data.fileName,
1019-
fileSize: response.data.fileSize,
1020-
data: Utility.convertToFileBuffer(data)
1021-
});
1015+
else {
1016+
successCallback({
1017+
fileName: response.data.fileName,
1018+
fileSize: response.data.fileSize,
1019+
data: Utility.convertToFileBuffer(data)
1020+
});
1021+
}
10221022
}
10231023

1024-
return _makeRequest("GET", request, "downloadFile", internalSuccessCallback, errorCallback, { parse: true });
1024+
_makeRequest("GET", request, "downloadFile", internalSuccessCallback, errorCallback, { parse: true });
10251025
};
10261026

10271027
/**
@@ -2466,7 +2466,7 @@ function setStandardHeaders(additionalHeaders) {
24662466
additionalHeaders["OData-Version"] = "4.0";
24672467
additionalHeaders['Content-Type'] = additionalHeaders["Content-Range"]
24682468
? 'application/octet-stream'
2469-
: 'application/json; charset=utf-8';
2469+
: 'application/json;charset=utf-8';
24702470

24712471
return additionalHeaders;
24722472
}
@@ -2722,7 +2722,7 @@ function sendRequest(method, path, config, data, additionalHeaders, responsePara
27222722

27232723
var executeRequest;
27242724
/* webpack-strip-block:removed */
2725-
executeRequest = __webpack_require__(105);
2725+
executeRequest = __webpack_require__(105).xhrRequest;
27262726
/* webpack-strip-block:removed */
27272727

27282728
var sendInternalRequest = function (token) {
@@ -2873,124 +2873,130 @@ if (!Array.isArray) {
28732873
* Sends a request to given URL with given parameters
28742874
*
28752875
*/
2876-
var xhrRequest = function (options) {
2877-
var method = options.method;
2878-
var uri = options.uri;
2879-
var data = options.data;
2880-
var additionalHeaders = options.additionalHeaders;
2881-
var responseParams = options.responseParams;
2882-
var successCallback = options.successCallback;
2883-
var errorCallback = options.errorCallback;
2884-
var isAsync = options.isAsync;
2885-
var requestId = options.requestId;
2886-
2887-
var request = new XMLHttpRequest();
2888-
request.open(method, uri, isAsync);
2889-
2890-
//set additional headers
2891-
for (var key in additionalHeaders) {
2892-
request.setRequestHeader(key, additionalHeaders[key]);
2893-
}
2894-
2895-
request.onreadystatechange = function () {
2896-
if (request.readyState === 4) {
2897-
switch (request.status) {
2898-
case 200: // Success with content returned in response body.
2899-
case 201: // Success with content returned in response body.
2900-
case 204: // Success with no content returned in response body.
2901-
case 304: {// Success with Not Modified
2902-
var responseHeaders = parseResponseHeaders(request.getAllResponseHeaders());
2903-
var responseData = parseResponse(request.responseText, responseHeaders, responseParams[requestId]);
2904-
2905-
var response = {
2906-
data: responseData,
2907-
headers: responseHeaders,
2908-
status: request.status
2909-
};
29102876

2911-
delete responseParams[requestId];
2912-
request = null;
2877+
let xhrWrapper = {
2878+
//for testing
2879+
afterSendEvent: null,
2880+
xhrRequest: function (options) {
2881+
var method = options.method;
2882+
var uri = options.uri;
2883+
var data = options.data;
2884+
var additionalHeaders = options.additionalHeaders;
2885+
var responseParams = options.responseParams;
2886+
var successCallback = options.successCallback;
2887+
var errorCallback = options.errorCallback;
2888+
var isAsync = options.isAsync;
2889+
var requestId = options.requestId;
2890+
2891+
2892+
var request = new XMLHttpRequest();
2893+
request.open(method, uri, isAsync);
2894+
2895+
//set additional headers
2896+
for (var key in additionalHeaders) {
2897+
request.setRequestHeader(key, additionalHeaders[key]);
2898+
}
29132899

2914-
successCallback(response);
2900+
request.onreadystatechange = function () {
2901+
if (request.readyState === 4) {
2902+
switch (request.status) {
2903+
case 200: // Success with content returned in response body.
2904+
case 201: // Success with content returned in response body.
2905+
case 204: // Success with no content returned in response body.
2906+
case 206: //Success with partial content
2907+
case 304: {// Success with Not Modified
2908+
var responseHeaders = parseResponseHeaders(request.getAllResponseHeaders());
2909+
var responseData = parseResponse(request.responseText, responseHeaders, responseParams[requestId]);
2910+
2911+
var response = {
2912+
data: responseData,
2913+
headers: responseHeaders,
2914+
status: request.status
2915+
};
2916+
2917+
delete responseParams[requestId];
2918+
request = null;
2919+
2920+
successCallback(response);
2921+
2922+
break;
2923+
}
2924+
default: // All other statuses are error cases.
2925+
var error;
2926+
try {
2927+
var headers = parseResponseHeaders(request.getAllResponseHeaders());
2928+
var errorParsed = parseResponse(request.responseText, headers, responseParams[requestId]);
2929+
2930+
if (Array.isArray(errorParsed)) {
2931+
errorCallback(errorParsed);
2932+
break;
2933+
}
29152934

2916-
break;
2917-
}
2918-
case 206: { //Success with partial content
2919-
//true indicates continue
2920-
successCallback(true);
2921-
break;
2922-
}
2923-
default: // All other statuses are error cases.
2924-
var error;
2925-
try {
2926-
var headers = parseResponseHeaders(request.getAllResponseHeaders());
2927-
var errorParsed = parseResponse(request.responseText, headers, responseParams[requestId]);
2928-
2929-
if (Array.isArray(errorParsed)) {
2930-
errorCallback(errorParsed);
2931-
break;
2935+
error = errorParsed.error;
2936+
} catch (e) {
2937+
if (request.response.length > 0) {
2938+
error = { message: request.response };
2939+
}
2940+
else {
2941+
error = { message: "Unexpected Error" };
2942+
}
29322943
}
29332944

2934-
error = errorParsed.error;
2935-
} catch (e) {
2936-
if (request.response.length > 0) {
2937-
error = { message: request.response };
2938-
}
2939-
else {
2940-
error = { message: "Unexpected Error" };
2945+
var errorResponse = {
2946+
status: request.status,
2947+
statusText: request.statusText,
2948+
headers: headers
29412949
}
2942-
}
29432950

2944-
var errorResponse = {
2945-
status: request.status,
2946-
statusText: request.statusText,
2947-
headers: headers
2948-
}
2951+
delete responseParams[requestId];
2952+
request = null;
29492953

2950-
delete responseParams[requestId];
2951-
request = null;
2954+
errorCallback(ErrorHelper.handleHttpError(error, errorResponse));
29522955

2953-
errorCallback(ErrorHelper.handleHttpError(error, errorResponse));
2954-
2955-
break;
2956+
break;
2957+
}
29562958
}
2959+
};
2960+
2961+
if (options.timeout) {
2962+
request.timeout = options.timeout;
29572963
}
2958-
};
29592964

2960-
if (options.timeout) {
2961-
request.timeout = options.timeout;
2962-
}
2965+
request.onerror = function () {
2966+
var headers = parseResponseHeaders(request.getAllResponseHeaders());
2967+
errorCallback(ErrorHelper.handleHttpError({
2968+
status: request.status,
2969+
statusText: request.statusText,
2970+
message: request.responseText || "Network Error",
2971+
headers: headers
2972+
}));
2973+
delete responseParams[requestId];
2974+
request = null;
2975+
};
29632976

2964-
request.onerror = function () {
2965-
var headers = parseResponseHeaders(request.getAllResponseHeaders());
2966-
errorCallback(ErrorHelper.handleHttpError({
2967-
status: request.status,
2968-
statusText: request.statusText,
2969-
message: request.responseText || "Network Error",
2970-
headers: headers
2971-
}));
2972-
delete responseParams[requestId];
2973-
request = null;
2974-
};
2977+
request.ontimeout = function () {
2978+
var headers = parseResponseHeaders(request.getAllResponseHeaders());
2979+
errorCallback(ErrorHelper.handleHttpError({
2980+
status: request.status,
2981+
statusText: request.statusText,
2982+
message: request.responseText || "Request Timed Out",
2983+
headers: headers
2984+
}));
2985+
delete responseParams[requestId];
2986+
request = null;
2987+
};
29752988

2976-
request.ontimeout = function () {
2977-
var headers = parseResponseHeaders(request.getAllResponseHeaders());
2978-
errorCallback(ErrorHelper.handleHttpError({
2979-
status: request.status,
2980-
statusText: request.statusText,
2981-
message: request.responseText || "Request Timed Out",
2982-
headers: headers
2983-
}));
2984-
delete responseParams[requestId];
2985-
request = null;
2986-
};
2989+
data
2990+
? request.send(data)
2991+
: request.send();
29872992

2988-
data
2989-
? request.send(data)
2990-
: request.send();
2991-
};
2993+
//called for testing
2994+
if (xhrWrapper.afterSendEvent)
2995+
xhrWrapper.afterSendEvent();
2996+
}
2997+
}
29922998

2993-
module.exports = xhrRequest;
2999+
module.exports = xhrWrapper;
29943000

29953001

29963002
/***/ }),
@@ -3339,13 +3345,12 @@ function getCrypto() {
33393345
return window.crypto;
33403346
}
33413347

3342-
var uCrypto = getCrypto();
3343-
33443348
function isNull(value) {
33453349
return typeof value === "undefined" || value == null;
33463350
}
33473351

33483352
function generateRandomBytes() {
3353+
var uCrypto = getCrypto();
33493354
/* webpack-strip-block:removed */
33503355
return uCrypto.getRandomValues(new Uint8Array(1));
33513356
/* webpack-strip-block:removed */
@@ -3448,14 +3453,16 @@ function setFileChunk(request, fileBuffer, chunkSize, offset) {
34483453

34493454
function convertToFileBuffer(binaryString) {
34503455
/* webpack-strip-block:removed */
3451-
var bytes = new Uint8Array(data.length);
3452-
for (var i = 0; i < data.length; i++) {
3453-
bytes[i] = data.charCodeAt(i);
3456+
var bytes = new Uint8Array(binaryString.length);
3457+
for (var i = 0; i < binaryString.length; i++) {
3458+
bytes[i] = binaryString.charCodeAt(i);
34543459
}
34553460
return bytes;
34563461
/* webpack-strip-block:removed */
34573462
}
34583463

3464+
var downloadChunkSize = 4194304;
3465+
34593466
var Utility = {
34603467
/**
34613468
* Builds parametes for a funciton. Returns '()' (if no parameters) or '([params])?[query]'
@@ -3505,7 +3512,9 @@ var Utility = {
35053512

35063513
setFileChunk: setFileChunk,
35073514

3508-
convertToFileBuffer: convertToFileBuffer
3515+
convertToFileBuffer: convertToFileBuffer,
3516+
3517+
downloadChunkSize: downloadChunkSize
35093518
};
35103519

35113520
module.exports = Utility;

dist/dynamics-web-api-callbacks.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)