UNPKG

2.29 kBJavaScriptView Raw
1// If given value is an object return as stringified JSON
2
3exports.stringifyIfObject = function (val) {
4 return typeof val === 'object' ? JSON.stringify(val) : val;
5};
6
7// Creates payload of request (Transforms into multipart form data if a
8// `files` field is present in the `data` object)
9
10exports.formRequestPayload = function (req, data) {
11 if (data.files) {
12 var formData = new FormData();
13
14 addMultiformData(formData, data);
15 addFiles(formData, data.files);
16
17 return formData;
18 }
19
20 req.setRequestHeader('Content-type','application/json; charset=utf-8');
21 return JSON.stringify(data);
22};
23
24// If given string represent a JSON object, parses it, otherwise returns the
25// original string
26
27exports.parseIfJSON = function (str) {
28 try {
29 return JSON.parse(str);
30 } catch (e) {
31 return str;
32 }
33};
34
35// Builds the final URL from a dynamic route given an object containing the
36// route `params`
37
38exports.compileRoute = function (route, params) {
39 return route.replace(/(:[a-zA-Z-_]{1,})/g, function () {
40 return params[arguments[0].substr(1)];
41 });
42};
43
44// Helper used by `formRequestPayload` to append data to FormData instance
45
46function addMultiformData (formData, data) {
47 var key, arr, i;
48
49 for (key in data) {
50 if (data.hasOwnProperty(key) && key !== 'files') {
51 if (data[key] instanceof Array) {
52 arr = data[key];
53
54 for (i = 0; i < arr.length; i += 1) {
55 formData.append(key + '[' + i + ']', exports.stringifyIfObject(arr[i]));
56 }
57 } else {
58 formData.append(key, exports.stringifyIfObject(data[key]));
59 }
60 }
61 }
62}
63
64// Helper used by `formRequestPayload` to append files to a FormData instance
65
66function addFiles (formData, files) {
67 var file, arr, key, i;
68
69 for (key in files) {
70 if (files.hasOwnProperty(key)) {
71
72 if (files[key] instanceof Array) {
73 arr = files[key];
74
75 for (i = 0; i < arr.length; i += 1) {
76 formData.append(key + '[' + i + ']', arr[i]);
77 }
78 } else {
79 file = files[key];
80 formData.append(key, file);
81 }
82 }
83 }
84}
\No newline at end of file