summaryrefslogtreecommitdiff
path: root/node_modules/snekfetch/src/node/FormData.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/snekfetch/src/node/FormData.js')
-rw-r--r--node_modules/snekfetch/src/node/FormData.js51
1 files changed, 51 insertions, 0 deletions
diff --git a/node_modules/snekfetch/src/node/FormData.js b/node_modules/snekfetch/src/node/FormData.js
new file mode 100644
index 0000000..f8270e2
--- /dev/null
+++ b/node_modules/snekfetch/src/node/FormData.js
@@ -0,0 +1,51 @@
+const path = require('path');
+const mime = require('./mime');
+
+class FormData {
+ constructor() {
+ this.boundary = `--snekfetch--${Math.random().toString().slice(2, 7)}`;
+ this.buffers = [];
+ }
+
+ append(name, data, filename) {
+ if (typeof data === 'undefined')
+ return;
+ let str = `\r\n--${this.boundary}\r\nContent-Disposition: form-data; name="${name}"`;
+ let mimetype = null;
+ if (filename) {
+ str += `; filename="${filename}"`;
+ mimetype = 'application/octet-stream';
+ const extname = path.extname(filename).slice(1);
+ if (extname)
+ mimetype = mime.lookup(extname);
+ }
+
+ if (data instanceof Buffer) {
+ mimetype = mime.buffer(data);
+ } else if (typeof data === 'object') {
+ mimetype = 'application/json';
+ data = Buffer.from(JSON.stringify(data));
+ } else {
+ data = Buffer.from(String(data));
+ }
+
+ if (mimetype)
+ str += `\r\nContent-Type: ${mimetype}`;
+ this.buffers.push(Buffer.from(`${str}\r\n\r\n`));
+ this.buffers.push(data);
+ }
+
+ getBoundary() {
+ return this.boundary;
+ }
+
+ end() {
+ return Buffer.concat([...this.buffers, Buffer.from(`\r\n--${this.boundary}--`)]);
+ }
+
+ get length() {
+ return this.buffers.reduce((sum, b) => sum + Buffer.byteLength(b), 0);
+ }
+}
+
+module.exports = FormData;