breeze-client
Version:
Breeze data management for JavaScript clients
77 lines • 9.23 kB
JavaScript
/**
* Functions to enable Breeze to use POST for queries when
* special parameters are passed using the .withParameters function.
*
* Copyright 2015-2021 IdeaBlade, Inc. All Rights Reserved.
* Use, reproduction, distribution, and modification of this code is subject to the terms and
* conditions of the IdeaBlade Breeze license, available at http://www.breezejs.com/license
*
* Author: Steve Schmitt
* Version:
* 1.2.0 - Moved into breeze-client repo and npm package
* 1.1.0 - revised: eliminated return object, configAjaxAdapter method; add ajaxPostEnabled flag
* 1.0.6 - original
*
* Special parameters:
* $method: ‘POST’ or ‘GET’ (the default)
* $encoding: ‘JSON’ or x-www-form-urlencoded (the default)
* $data: contains the data to be sent to the server
*
* Installation:
* var ajaxAdapter = config.initializeAdapterInstance('ajax', adapterName, true);
* AjaxPostWrapper.wrapAjax(ajaxAdapter);
*
* Example:
* var query = breeze.EntityQuery.from('SimilarCustomersPOST')
* .withParameters({
* $method: 'POST',
* $encoding: 'JSON',
* $data: { CompanyName: 'Hilo Hattie', ContactName: 'Donald', City: 'Duck', Country: 'USA', Phone: '808-234-5678' }
* });
*
**/
export class AjaxPostWrapper {
static wrapAjax(ajaxAdapter) {
if (ajaxAdapter.ajaxPostEnabled) {
return; // already wrapped it.
}
let ajaxFunction = ajaxAdapter.ajax;
if (ajaxFunction) {
ajaxAdapter.ajax = function (settings) {
processSettings(settings);
return ajaxFunction.call(ajaxAdapter, settings);
};
ajaxAdapter.ajaxPostEnabled = true;
}
// Handle the POST-specific properties in the settings - $method, $data, $encoding
function processSettings(settings) {
let parameters = settings && settings.params;
if (!parameters)
return settings;
// wrapped data; handle the special properties
settings.type = parameters.$method || settings.type; // GET is default method
let data = parameters.$data;
if (data) {
// if $data exists, assume all of other parameters are guidance for building a POST
if (parameters.$encoding === 'JSON') {
// JSON encoding
settings.processData = false; // don't let JQuery form-encode it
settings.contentType = "application/json; charset=UTF-8";
if (typeof (data) === 'object') {
settings.data = JSON.stringify(data); // encode parameters as JSON
}
else {
settings.data = data;
}
}
else {
settings.data = data;
}
// must be null or jQuery ajax adapter won't see settings.data
settings.params = null;
}
return settings;
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci1hamF4LXBvc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRhcHRlci1hamF4LXBvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUErQkk7QUFDSixNQUFNLE9BQU8sZUFBZTtJQUUxQixNQUFNLENBQUMsUUFBUSxDQUFDLFdBQStCO1FBRTdDLElBQUssV0FBbUIsQ0FBQyxlQUFlLEVBQUU7WUFDeEMsT0FBTyxDQUFDLHNCQUFzQjtTQUMvQjtRQUVELElBQUksWUFBWSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDcEMsSUFBSSxZQUFZLEVBQUU7WUFDaEIsV0FBVyxDQUFDLElBQUksR0FBRyxVQUFVLFFBQVE7Z0JBQ25DLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUIsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNsRCxDQUFDLENBQUM7WUFDRCxXQUFtQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7U0FDN0M7UUFHRCxrRkFBa0Y7UUFDbEYsU0FBUyxlQUFlLENBQUMsUUFBYTtZQUNwQyxJQUFJLFVBQVUsR0FBRyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUM3QyxJQUFJLENBQUMsVUFBVTtnQkFBRSxPQUFPLFFBQVEsQ0FBQztZQUVqQyw4Q0FBOEM7WUFDOUMsUUFBUSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyx3QkFBd0I7WUFFN0UsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUM1QixJQUFJLElBQUksRUFBRTtnQkFDUixtRkFBbUY7Z0JBQ25GLElBQUksVUFBVSxDQUFDLFNBQVMsS0FBSyxNQUFNLEVBQUU7b0JBQ25DLGdCQUFnQjtvQkFDaEIsUUFBUSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxrQ0FBa0M7b0JBQ2hFLFFBQVEsQ0FBQyxXQUFXLEdBQUcsaUNBQWlDLENBQUM7b0JBRXpELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLFFBQVEsRUFBRTt3QkFDOUIsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNEJBQTRCO3FCQUNuRTt5QkFBTTt3QkFDTCxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztxQkFDdEI7aUJBQ0Y7cUJBQU07b0JBQ0wsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7aUJBQ3RCO2dCQUNELDhEQUE4RDtnQkFDOUQsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7YUFDeEI7WUFFRCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztDQUdGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYnJlZXplIGZyb20gJ2JyZWV6ZS1jbGllbnQnO1xyXG5cclxuLyoqXHJcbiAqICBGdW5jdGlvbnMgdG8gZW5hYmxlIEJyZWV6ZSB0byB1c2UgUE9TVCBmb3IgcXVlcmllcyB3aGVuXHJcbiAqICBzcGVjaWFsIHBhcmFtZXRlcnMgYXJlIHBhc3NlZCB1c2luZyB0aGUgLndpdGhQYXJhbWV0ZXJzIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIxIElkZWFCbGFkZSwgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICogVXNlLCByZXByb2R1Y3Rpb24sIGRpc3RyaWJ1dGlvbiwgYW5kIG1vZGlmaWNhdGlvbiBvZiB0aGlzIGNvZGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kXHJcbiAqIGNvbmRpdGlvbnMgb2YgdGhlIElkZWFCbGFkZSBCcmVlemUgbGljZW5zZSwgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYnJlZXplanMuY29tL2xpY2Vuc2VcclxuICpcclxuICogQXV0aG9yOiBTdGV2ZSBTY2htaXR0XHJcbiAqIFZlcnNpb246IFxyXG4gKiAgMS4yLjAgLSBNb3ZlZCBpbnRvIGJyZWV6ZS1jbGllbnQgcmVwbyBhbmQgbnBtIHBhY2thZ2VcclxuICogIDEuMS4wIC0gcmV2aXNlZDogZWxpbWluYXRlZCByZXR1cm4gb2JqZWN0LCBjb25maWdBamF4QWRhcHRlciBtZXRob2Q7IGFkZCBhamF4UG9zdEVuYWJsZWQgZmxhZ1xyXG4gKiAgMS4wLjYgLSBvcmlnaW5hbFxyXG4gKlxyXG4gKiBTcGVjaWFsIHBhcmFtZXRlcnM6XHJcbiAqICAkbWV0aG9kOiDigJhQT1NU4oCZIG9yIOKAmEdFVOKAmSAodGhlIGRlZmF1bHQpXHJcbiAqICAkZW5jb2Rpbmc6IOKAmEpTT07igJkgb3IgeC13d3ctZm9ybS11cmxlbmNvZGVkICh0aGUgZGVmYXVsdClcclxuICogICRkYXRhOiBjb250YWlucyB0aGUgZGF0YSB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXJcclxuICpcclxuICogSW5zdGFsbGF0aW9uOlxyXG4gKiAgICB2YXIgYWpheEFkYXB0ZXIgPSBjb25maWcuaW5pdGlhbGl6ZUFkYXB0ZXJJbnN0YW5jZSgnYWpheCcsIGFkYXB0ZXJOYW1lLCB0cnVlKTtcclxuICogICAgQWpheFBvc3RXcmFwcGVyLndyYXBBamF4KGFqYXhBZGFwdGVyKTtcclxuICpcclxuICogRXhhbXBsZTpcclxuICogICB2YXIgcXVlcnkgPSBicmVlemUuRW50aXR5UXVlcnkuZnJvbSgnU2ltaWxhckN1c3RvbWVyc1BPU1QnKVxyXG4gKiAgICAgICAgICAgIC53aXRoUGFyYW1ldGVycyh7XHJcbiAqICAgICAgICAgICAgICAgICRtZXRob2Q6ICdQT1NUJyxcclxuICogICAgICAgICAgICAgICAgJGVuY29kaW5nOiAnSlNPTicsXHJcbiAqICAgICAgICAgICAgICAgJGRhdGE6IHsgQ29tcGFueU5hbWU6ICdIaWxvIEhhdHRpZScsIENvbnRhY3ROYW1lOiAnRG9uYWxkJywgQ2l0eTogJ0R1Y2snLCBDb3VudHJ5OiAnVVNBJywgUGhvbmU6ICc4MDgtMjM0LTU2NzgnIH1cclxuICogICAgICAgICAgIH0pO1xyXG4gKlxyXG4gKiovXHJcbmV4cG9ydCBjbGFzcyBBamF4UG9zdFdyYXBwZXIge1xyXG5cclxuICBzdGF0aWMgd3JhcEFqYXgoYWpheEFkYXB0ZXI6IGJyZWV6ZS5BamF4QWRhcHRlcikge1xyXG5cclxuICAgIGlmICgoYWpheEFkYXB0ZXIgYXMgYW55KS5hamF4UG9zdEVuYWJsZWQpIHtcclxuICAgICAgcmV0dXJuOyAvLyBhbHJlYWR5IHdyYXBwZWQgaXQuXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGFqYXhGdW5jdGlvbiA9IGFqYXhBZGFwdGVyLmFqYXg7XHJcbiAgICBpZiAoYWpheEZ1bmN0aW9uKSB7XHJcbiAgICAgIGFqYXhBZGFwdGVyLmFqYXggPSBmdW5jdGlvbiAoc2V0dGluZ3MpIHtcclxuICAgICAgICBwcm9jZXNzU2V0dGluZ3Moc2V0dGluZ3MpO1xyXG4gICAgICAgIHJldHVybiBhamF4RnVuY3Rpb24uY2FsbChhamF4QWRhcHRlciwgc2V0dGluZ3MpO1xyXG4gICAgICB9O1xyXG4gICAgICAoYWpheEFkYXB0ZXIgYXMgYW55KS5hamF4UG9zdEVuYWJsZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBIYW5kbGUgdGhlIFBPU1Qtc3BlY2lmaWMgcHJvcGVydGllcyBpbiB0aGUgc2V0dGluZ3MgLSAkbWV0aG9kLCAkZGF0YSwgJGVuY29kaW5nXHJcbiAgICBmdW5jdGlvbiBwcm9jZXNzU2V0dGluZ3Moc2V0dGluZ3M6IGFueSkge1xyXG4gICAgICBsZXQgcGFyYW1ldGVycyA9IHNldHRpbmdzICYmIHNldHRpbmdzLnBhcmFtcztcclxuICAgICAgaWYgKCFwYXJhbWV0ZXJzKSByZXR1cm4gc2V0dGluZ3M7XHJcblxyXG4gICAgICAvLyB3cmFwcGVkIGRhdGE7IGhhbmRsZSB0aGUgc3BlY2lhbCBwcm9wZXJ0aWVzXHJcbiAgICAgIHNldHRpbmdzLnR5cGUgPSBwYXJhbWV0ZXJzLiRtZXRob2QgfHwgc2V0dGluZ3MudHlwZTsgLy8gR0VUIGlzIGRlZmF1bHQgbWV0aG9kXHJcblxyXG4gICAgICBsZXQgZGF0YSA9IHBhcmFtZXRlcnMuJGRhdGE7XHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgLy8gaWYgJGRhdGEgZXhpc3RzLCBhc3N1bWUgYWxsIG9mIG90aGVyIHBhcmFtZXRlcnMgYXJlIGd1aWRhbmNlIGZvciBidWlsZGluZyBhIFBPU1RcclxuICAgICAgICBpZiAocGFyYW1ldGVycy4kZW5jb2RpbmcgPT09ICdKU09OJykge1xyXG4gICAgICAgICAgLy8gSlNPTiBlbmNvZGluZ1xyXG4gICAgICAgICAgc2V0dGluZ3MucHJvY2Vzc0RhdGEgPSBmYWxzZTsgLy8gZG9uJ3QgbGV0IEpRdWVyeSBmb3JtLWVuY29kZSBpdFxyXG4gICAgICAgICAgc2V0dGluZ3MuY29udGVudFR5cGUgPSBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLThcIjtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIChkYXRhKSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgc2V0dGluZ3MuZGF0YSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpOyAvLyBlbmNvZGUgcGFyYW1ldGVycyBhcyBKU09OXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZXR0aW5ncy5kYXRhID0gZGF0YTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc2V0dGluZ3MuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG11c3QgYmUgbnVsbCBvciBqUXVlcnkgYWpheCBhZGFwdGVyIHdvbid0IHNlZSBzZXR0aW5ncy5kYXRhXHJcbiAgICAgICAgc2V0dGluZ3MucGFyYW1zID0gbnVsbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHNldHRpbmdzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG59Il19