UNPKG

breeze-client

Version:

Breeze data management for JavaScript clients

77 lines 9.23 kB
/** * 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