kubo-rpc-client
Version:
A client library for the Kubo RPC API
52 lines • 1.83 kB
JavaScript
// Import browser version otherwise electron-renderer will end up with node
// version and fail.
import { normaliseInput } from './files/normalise-input-multiple.browser.js';
import { modeToString } from './mode-to-string.js';
export async function multipartRequest(source, abortController, headers = {}, boundary) {
const parts = [];
const formData = new FormData();
let index = 0;
let total = 0;
for await (const { content, path, mode, mtime } of normaliseInput(source)) {
let fileSuffix = '';
const type = content != null ? 'file' : 'dir';
if (index > 0) {
fileSuffix = `-${index}`;
}
let fieldName = type + fileSuffix;
const qs = [];
if (mode !== null && mode !== undefined) {
qs.push(`mode=${modeToString(mode)}`);
}
if ((mtime) != null) {
const { secs, nsecs } = (mtime);
qs.push(`mtime=${secs}`);
if (nsecs != null) {
qs.push(`mtime-nsecs=${nsecs}`);
}
}
if (qs.length > 0) {
fieldName = `${fieldName}?${qs.join('&')}`;
}
if (content != null) {
formData.set(fieldName, content, path != null ? encodeURIComponent(path) : undefined);
const end = total + content.size;
parts.push({ name: path, start: total, end });
total = end;
}
else if (path != null) {
formData.set(fieldName, new File([''], encodeURIComponent(path), { type: 'application/x-directory' }));
}
else {
throw new Error('path or content or both must be set');
}
index++;
}
return {
total,
parts,
headers,
body: formData
};
}
//# sourceMappingURL=multipart-request.browser.js.map