42 lines
1.6 KiB
JavaScript
42 lines
1.6 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var extract_files_1 = require("extract-files");
|
|
var form_data_1 = __importDefault(require("form-data"));
|
|
/**
|
|
* Duck type if NodeJS stream
|
|
* https://github.com/sindresorhus/is-stream/blob/3750505b0727f6df54324784fe369365ef78841e/index.js#L3
|
|
*/
|
|
var isExtractableFileEnhanced = function (value) {
|
|
return extract_files_1.isExtractableFile(value) ||
|
|
(value !== null && typeof value === 'object' && typeof value.pipe === 'function');
|
|
};
|
|
/**
|
|
* Returns Multipart Form if body contains files
|
|
* (https://github.com/jaydenseric/graphql-multipart-request-spec)
|
|
* Otherwise returns JSON
|
|
*/
|
|
function createRequestBody(query, variables) {
|
|
var _a = extract_files_1.extractFiles({ query: query, variables: variables }, '', isExtractableFileEnhanced), clone = _a.clone, files = _a.files;
|
|
if (files.size === 0) {
|
|
return JSON.stringify(clone);
|
|
}
|
|
var Form = typeof FormData === 'undefined' ? form_data_1.default : FormData;
|
|
var form = new Form();
|
|
form.append('operations', JSON.stringify(clone));
|
|
var map = {};
|
|
var i = 0;
|
|
files.forEach(function (paths) {
|
|
map[++i] = paths;
|
|
});
|
|
form.append('map', JSON.stringify(map));
|
|
i = 0;
|
|
files.forEach(function (paths, file) {
|
|
form.append("" + ++i, file);
|
|
});
|
|
return form;
|
|
}
|
|
exports.default = createRequestBody;
|
|
//# sourceMappingURL=createRequestBody.js.map
|