formdata-node
Advanced tools
Comparing version 2.2.2 to 2.3.0
@@ -1,64 +0,41 @@ | ||
"use strict"; | ||
const {Readable} = require("stream") | ||
const {inspect} = require("util") | ||
const {basename} = require("path") | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
const mimes = require("mime-types") | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
const getStreamIterator = require("./util/getStreamIterator.js") | ||
const getLength = require("./util/getLength.js") | ||
const isObject = require("./util/isObject.js") | ||
const isStream = require("./util/isStream.js") | ||
const boundary = require("./util/boundary.js") | ||
// const readOnly = require("./util/readOnly.js") | ||
const isBlob = require("./util/isBlob.js") | ||
const toFile = require("./util/toFile.js") | ||
var _initializerDefineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/initializerDefineProperty")); | ||
const {isBuffer} = Buffer | ||
const {isArray} = Array | ||
const {freeze} = Object | ||
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); | ||
/** | ||
* @const DEFAULT_CONTENT_TYPE | ||
* | ||
* @type {"application/octet-stream"} | ||
*/ | ||
const DEFAULT_CONTENT_TYPE = "application/octet-stream" | ||
var _applyDecoratedDescriptor2 = _interopRequireDefault(require("@babel/runtime/helpers/applyDecoratedDescriptor")); | ||
/** | ||
* @const DASHES | ||
* | ||
* @type{"--"} | ||
*/ | ||
const DASHES = "-".repeat(2) | ||
var _initializerWarningHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/initializerWarningHelper")); | ||
/** | ||
* @const CARRIAGE | ||
* | ||
* @type {"\r\n"} | ||
*/ | ||
const CARRIAGE = "\r\n" | ||
var _stream = _interopRequireDefault(require("stream")); | ||
var _util = _interopRequireDefault(require("util")); | ||
var _path = _interopRequireDefault(require("path")); | ||
var _mimeTypes = _interopRequireDefault(require("mime-types")); | ||
var _getStreamIterator = _interopRequireDefault(require("./util/getStreamIterator")); | ||
var _getLength = _interopRequireDefault(require("./util/getLength")); | ||
var _isObject = _interopRequireDefault(require("./util/isObject")); | ||
var _isStream = _interopRequireDefault(require("./util/isStream")); | ||
var _boundary = _interopRequireDefault(require("./util/boundary")); | ||
var _readOnly = _interopRequireDefault(require("./util/readOnly")); | ||
var _isBlob = _interopRequireDefault(require("./util/isBlob")); | ||
var _toFile = _interopRequireDefault(require("./util/toFile")); | ||
let _Symbol$toStringTag, _Symbol$iterator, _Symbol$asyncIterator, _inspect$custom; | ||
var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _temp; | ||
const { | ||
isBuffer | ||
} = Buffer; | ||
const { | ||
isArray | ||
} = Array; | ||
const { | ||
freeze | ||
} = Object; | ||
const { | ||
Readable | ||
} = _stream.default; | ||
const { | ||
inspect | ||
} = _util.default; | ||
const { | ||
basename | ||
} = _path.default; | ||
/** | ||
@@ -75,60 +52,4 @@ * @typedef {Object} FieldOptions | ||
*/ | ||
let FormData = (_class = (_temp = (_Symbol$toStringTag = Symbol.toStringTag, _Symbol$iterator = Symbol.iterator, _Symbol$asyncIterator = Symbol.asyncIterator, _inspect$custom = inspect.custom, class FormData { | ||
class FormData { | ||
/** | ||
* Generates a new boundary string once FormData instance constructed | ||
* | ||
* @type {string} | ||
* | ||
* @public | ||
* @property | ||
* @readonly | ||
*/ | ||
/** | ||
* Returns headers for multipart/form-data | ||
* | ||
* @type {{"Content-Type": string}} | ||
* | ||
* @public | ||
* @property | ||
* @readonly | ||
*/ | ||
/** | ||
* @type {string} | ||
* | ||
* @private | ||
* @property | ||
* @readonly | ||
*/ | ||
/** | ||
* @type {string} | ||
* | ||
* @private | ||
* @readonly | ||
*/ | ||
/** | ||
* @type {string} | ||
* | ||
* @private | ||
* @readonly | ||
*/ | ||
/** | ||
* @type {string} | ||
* | ||
* @private | ||
* @readonly | ||
*/ | ||
/** | ||
* @type {Map<string, {append: boolean, values: Array<{value: any, filename: string}>}>} | ||
* | ||
* @private | ||
*/ | ||
/** | ||
* Refers to the internal Readable stream | ||
@@ -143,4 +64,5 @@ * | ||
get stream() { | ||
return Readable.from(this.__read()); | ||
return Readable.from(this.__read()) | ||
} | ||
/** | ||
@@ -151,7 +73,6 @@ * Returns a string representation of the FormData | ||
*/ | ||
get [Symbol.toStringTag]() { | ||
return "FormData" | ||
} | ||
get [_Symbol$toStringTag]() { | ||
return "FormData"; | ||
} | ||
/** | ||
@@ -163,18 +84,61 @@ * @param {Array<{name: string, value: any, filename?: string, options?: FieldOptions}>} [fields] – an optional FormData initial fields. | ||
*/ | ||
constructor(fields = null) { | ||
/** | ||
* Generates a new boundary string once FormData instance constructed | ||
* | ||
* @type {string} | ||
* | ||
* @public | ||
* @property | ||
* @readonly | ||
*/ | ||
this.boundary = `NodeJSFormDataStreamBoundary${boundary()}` | ||
/** | ||
* Returns headers for multipart/form-data | ||
* | ||
* @type {{"Content-Type": string}} | ||
* | ||
* @public | ||
* @property | ||
* @readonly | ||
*/ | ||
this.headers = freeze({ | ||
"Content-Type": `multipart/form-data; boundary=${this.boundary}` | ||
}) | ||
constructor(fields = null) { | ||
(0, _initializerDefineProperty2.default)(this, "boundary", _descriptor, this); | ||
(0, _initializerDefineProperty2.default)(this, "headers", _descriptor2, this); | ||
(0, _initializerDefineProperty2.default)(this, "__carriage", _descriptor3, this); | ||
(0, _initializerDefineProperty2.default)(this, "__dashes", _descriptor4, this); | ||
(0, _initializerDefineProperty2.default)(this, "__footer", _descriptor5, this); | ||
(0, _initializerDefineProperty2.default)(this, "__defaultContentType", _descriptor6, this); | ||
(0, _initializerDefineProperty2.default)(this, "__content", _descriptor7, this); | ||
(0, _defineProperty2.default)(this, "inspect", this[inspect.custom]); | ||
/** | ||
* @type {Map<string, {append: boolean, values: Array<{value: any, filename: string}>}>} | ||
* | ||
* @private | ||
* @readonly | ||
* @property | ||
*/ | ||
this.__content = new Map() | ||
/** | ||
* @type {string} | ||
* | ||
* @private | ||
* @readonly | ||
* @property | ||
*/ | ||
this.__footer = `${DASHES}${this.boundary}${DASHES}` | ||
+ `${CARRIAGE.repeat(2)}` | ||
/** | ||
* Alias of the FormData#[util.inspect.custom]() | ||
* | ||
* @return {string} | ||
* | ||
* @public | ||
* @method | ||
*/ | ||
this.inspect = this[inspect.custom] | ||
if (isArray(fields)) { | ||
this.__appendFromInitialFields(fields); | ||
this.__appendFromInitialFields(fields) | ||
} | ||
} | ||
/** | ||
@@ -190,7 +154,6 @@ * Returns a mime type by field's filename | ||
*/ | ||
__getMime(filename) { | ||
return _mimeTypes.default.lookup(filename) || this.__defaultContentType; | ||
return mimes.lookup(filename) || DEFAULT_CONTENT_TYPE | ||
} | ||
/** | ||
@@ -207,16 +170,16 @@ * Returns a headers for given field's data | ||
*/ | ||
__getHeader(name, filename) { | ||
let header = "" | ||
header += `${DASHES}${this.boundary}${CARRIAGE}` | ||
header += `Content-Disposition: form-data; name="${name}"` | ||
__getHeader(name, filename) { | ||
let header = ""; | ||
header += `${this.__dashes}${this.boundary}${this.__carriage}`; | ||
header += `Content-Disposition: form-data; name="${name}"`; | ||
if (filename) { | ||
header += `; filename="${filename}"${this.__carriage}`; | ||
header += `Content-Type: ${this.__getMime(filename)}`; | ||
header += `; filename="${filename}"${CARRIAGE}` | ||
header += `Content-Type: ${this.__getMime(filename)}` | ||
} | ||
return `${header}${this.__carriage.repeat(2)}`; | ||
return `${header}${CARRIAGE.repeat(2)}` | ||
} | ||
/** | ||
@@ -232,32 +195,26 @@ * Get each field from internal Map | ||
*/ | ||
async *__getField() { | ||
for (const [name, { | ||
values | ||
}] of this.__content) { | ||
for (const { | ||
value, | ||
filename | ||
} of values) { | ||
async* __getField() { | ||
for (const [name, {values}] of this.__content) { | ||
for (const {value, filename} of values) { | ||
// Set field's header | ||
yield this.__getHeader(name, filename); | ||
yield this.__getHeader(name, filename) | ||
if ((0, _isBlob.default)(value)) { | ||
yield* (0, _getStreamIterator.default)(value.stream()); | ||
} else if ((0, _isStream.default)(value)) { | ||
if (isBlob(value)) { | ||
yield* getStreamIterator(value.stream()) | ||
} else if (isStream(value)) { | ||
// Read the stream content | ||
yield* (0, _getStreamIterator.default)(value); | ||
yield* getStreamIterator(value) | ||
} else { | ||
yield value; | ||
} // Add trailing carriage | ||
yield value | ||
} | ||
yield this.__carriage; | ||
// Add trailing carriage | ||
yield CARRIAGE | ||
} | ||
} // Add a footer when all fields ended | ||
} | ||
// Add a footer when all fields ended | ||
yield this.__footer | ||
} | ||
yield this.__footer; | ||
} | ||
/** | ||
@@ -271,9 +228,8 @@ * Read values from internal storage and push it to the internal stream | ||
*/ | ||
async *__read() { | ||
async* __read() { | ||
for await (const ch of this.__getField()) { | ||
yield isBuffer(ch) ? ch : Buffer.from(String(ch)); | ||
yield isBuffer(ch) ? ch : Buffer.from(String(ch)) | ||
} | ||
} | ||
/** | ||
@@ -289,11 +245,10 @@ * Append initial fields | ||
*/ | ||
__appendFromInitialFields(fields) { | ||
for (const field of fields) { | ||
if ((0, _isObject.default)(field) && !isArray(field)) { | ||
this.append(field.name, field.value, field.filename, field.options); | ||
if (isObject(field) && !isArray(field)) { | ||
this.append(field.name, field.value, field.filename, field.options) | ||
} | ||
} | ||
} | ||
/** | ||
@@ -322,83 +277,82 @@ * Appends a new value onto an existing key inside a FormData object, | ||
*/ | ||
__setField(name, value, filename, options, append, argsLength) { | ||
const fieldName = String(name); | ||
const methodName = append ? "append" : "set"; | ||
const fieldName = String(name) | ||
const methodName = append ? "append" : "set" | ||
if ((0, _isObject.default)(filename)) { | ||
[options, filename] = [filename, undefined]; | ||
} // FormData required at least 2 arguments to be set. | ||
if (isObject(filename)) { | ||
[options, filename] = [filename, undefined] | ||
} | ||
// FormData required at least 2 arguments to be set. | ||
if (argsLength < 2) { | ||
throw new TypeError( | ||
`Failed to execute '${methodName}' on 'FormData': ` + | ||
`2 arguments required, but only ${argsLength} present.` | ||
) | ||
} | ||
if (argsLength < 2) { | ||
throw new TypeError(`Failed to execute '${methodName}' on 'FormData': ` + `2 arguments required, but only ${argsLength} present.`); | ||
} // FormData requires the second argument to be some kind of binary data | ||
// FormData requires the second argument to be some kind of binary data | ||
// when a filename has been set. | ||
if (filename && !(isBlob(value) || isStream(value) || isBuffer(value))) { | ||
throw new TypeError( | ||
`Failed to execute '${methodName}' on 'FormData': ` + | ||
"parameter 2 is not one of the following types: ", | ||
"ReadableStream | ReadStream | Readable | Buffer | File | Blob" | ||
) | ||
} | ||
if (filename && !((0, _isBlob.default)(value) || (0, _isStream.default)(value) || isBuffer(value))) { | ||
throw new TypeError(`Failed to execute '${methodName}' on 'FormData': ` + "parameter 2 is not one of the following types: ", "ReadableStream | ReadStream | Readable | Buffer | File | Blob"); | ||
} // Get a filename for Buffer, Blob, File, ReadableStream and Readable values | ||
// Get a filename for Buffer, Blob, File, ReadableStream and Readable values | ||
if (isBuffer(value) && filename) { | ||
filename = basename(filename); | ||
} else if ((0, _isBlob.default)(value)) { | ||
filename = basename(value.name || filename || (value.constructor.name === "Blob" ? "blob" : String(value.name))); | ||
} else if ((0, _isStream.default)(value) && (value.path || filename)) { | ||
filename = basename(filename) | ||
} else if (isBlob(value)) { | ||
filename = basename( | ||
value.name | ||
|| filename | ||
|| (value.constructor.name === "Blob" ? "blob" : String(value.name)) | ||
) | ||
} else if (isStream(value) && (value.path || filename)) { | ||
// Readable stream which created from fs.createReadStream | ||
// have a "path" property. So, we can get a "filename" | ||
// from the stream itself. | ||
filename = basename(value.path || filename); | ||
} // Normalize field content | ||
filename = basename(value.path || filename) | ||
} | ||
if ((0, _isStream.default)(value)) { | ||
// Normalize field content | ||
if (isStream(value)) { | ||
if (options.size != null) { | ||
value = (0, _toFile.default)(value, filename || name || options.filename, options); | ||
value = toFile(value, filename || name || options.filename, options) | ||
} | ||
} else if ((0, _isBlob.default)(value) || isBuffer(value)) { | ||
value = (0, _toFile.default)(value, filename || name || options.filename, options); | ||
} else if (isBlob(value) || isBuffer(value)) { | ||
value = toFile(value, filename || name || options.filename, options) | ||
} else { | ||
value = String(value); | ||
value = String(value) | ||
} | ||
const field = this.__content.get(fieldName); // Set a new field if given name is not exists | ||
const field = this.__content.get(fieldName) | ||
// Set a new field if given name is not exists | ||
if (!field) { | ||
return void this.__content.set(fieldName, { | ||
append, | ||
values: [{ | ||
value, | ||
filename | ||
}] | ||
}); | ||
} // Replace a value of the existing field if "set" called | ||
append, values: [{value, filename}] | ||
}) | ||
} | ||
// Replace a value of the existing field if "set" called | ||
if (!append) { | ||
return void this.__content.set(fieldName, { | ||
append, | ||
values: [{ | ||
value, | ||
filename | ||
}] | ||
}); | ||
} // Do nothing if the field has been created from .set() | ||
append, values: [{value, filename}] | ||
}) | ||
} | ||
// Do nothing if the field has been created from .set() | ||
if (!field.append) { | ||
return undefined; | ||
} // Append a new value to the existing field | ||
return undefined | ||
} | ||
// Append a new value to the existing field | ||
field.values.push({value, filename}) | ||
field.values.push({ | ||
value, | ||
filename | ||
}); | ||
this.__content.set(fieldName, field) | ||
} | ||
this.__content.set(fieldName, field); | ||
} | ||
/** | ||
@@ -414,29 +368,26 @@ * Returns computed length of the FormData content. | ||
*/ | ||
async getComputedLength() { | ||
let length = 0 | ||
const carriageLength = Buffer.from(CARRIAGE).length | ||
async getComputedLength() { | ||
let length = 0; | ||
const carriageLength = Buffer.from(this.__carriage).length; | ||
for (const [name, {values}] of this.__content) { | ||
for (const {value, filename} of values) { | ||
length += Buffer.from(this.__getHeader(name, filename)).length | ||
for (const [name, { | ||
values | ||
}] of this.__content) { | ||
for (const { | ||
value, | ||
filename | ||
} of values) { | ||
length += Buffer.from(this.__getHeader(name, filename)).length; | ||
const valueLength = await (0, _getLength.default)(value); // Return `undefined` if can't tell field's length | ||
const valueLength = await getLength(value) | ||
// Return `undefined` if can't tell field's length | ||
// (it's probably a stream with unknown length) | ||
if (valueLength == null) { | ||
return undefined; | ||
return undefined | ||
} | ||
length += Number(valueLength) + carriageLength; | ||
length += Number(valueLength) + carriageLength | ||
} | ||
} | ||
return length + Buffer.from(this.__footer).length; | ||
return length + Buffer.from(this.__footer).length | ||
} | ||
/** | ||
@@ -464,7 +415,8 @@ * Appends a new value onto an existing key inside a FormData object, | ||
*/ | ||
append(name, value, filename = undefined, options = {}) { | ||
return this.__setField(name, value, filename, options, true, arguments.length); | ||
return this.__setField( | ||
name, value, filename, options, true, arguments.length | ||
) | ||
} | ||
/** | ||
@@ -492,7 +444,8 @@ * Set a new value for an existing key inside FormData, | ||
*/ | ||
set(name, value, filename = undefined, options = {}) { | ||
return this.__setField(name, value, filename, options, false, arguments.length); | ||
return this.__setField( | ||
name, value, filename, options, false, arguments.length | ||
) | ||
} | ||
/** | ||
@@ -508,7 +461,6 @@ * Check if a field with the given name exists inside FormData. | ||
*/ | ||
has(name) { | ||
return this.__content.has(name); | ||
return this.__content.has(name) | ||
} | ||
/** | ||
@@ -522,13 +474,12 @@ * Returns the first value associated with the given name. | ||
*/ | ||
get(name) { | ||
const field = this.__content.get(String(name)); | ||
const field = this.__content.get(String(name)) | ||
if (!field) { | ||
return undefined; | ||
return undefined | ||
} | ||
return field.values[0].value; | ||
return field.values[0].value | ||
} | ||
/** | ||
@@ -542,11 +493,8 @@ * Returns all the values associated with | ||
*/ | ||
getAll(name) { | ||
const field = this.__content.get(String(name)); | ||
const field = this.__content.get(String(name)) | ||
return field ? Array.from(field.values, ({ | ||
value | ||
}) => value) : []; | ||
return field ? Array.from(field.values, ({value}) => value) : [] | ||
} | ||
/** | ||
@@ -559,49 +507,45 @@ * Deletes a key and its value(s) from a FormData object. | ||
*/ | ||
delete(name) { | ||
this.__content.delete(String(name)); | ||
this.__content.delete(String(name)) | ||
} | ||
/** | ||
* @return {IterableIterator<string>} | ||
*/ | ||
*keys() { | ||
* keys() { | ||
for (const key of this.__content.keys()) { | ||
yield key; | ||
yield key | ||
} | ||
} | ||
/** | ||
* @return {IterableIterator<[string, any]>} | ||
*/ | ||
*entries() { | ||
* entries() { | ||
for (const name of this.keys()) { | ||
const values = this.getAll(name); // Yield each value of a field, like browser-side FormData does. | ||
const values = this.getAll(name) | ||
// Yield each value of a field, like browser-side FormData does. | ||
for (const value of values) { | ||
yield [name, value]; | ||
yield [name, value] | ||
} | ||
} | ||
} | ||
/** | ||
* @return {IterableIterator<any>} | ||
*/ | ||
*values() { | ||
* values() { | ||
for (const [, values] of this) { | ||
yield values; | ||
yield values | ||
} | ||
} | ||
/** | ||
* @return {IterableIterator<[string, any]>} | ||
*/ | ||
[Symbol.iterator]() { | ||
return this.entries() | ||
} | ||
[_Symbol$iterator]() { | ||
return this.entries(); | ||
} | ||
/** | ||
@@ -621,9 +565,8 @@ * Executes a given callback for each field of the FormData instance | ||
*/ | ||
forEach(fn, ctx = null) { | ||
for (const [name, value] of this) { | ||
fn.call(ctx, value, name, this); | ||
fn.call(ctx, value, name, this) | ||
} | ||
} | ||
/** | ||
@@ -639,17 +582,6 @@ * This method allows to read a content from internal stream | ||
*/ | ||
[_Symbol$asyncIterator]() { | ||
return this.stream[Symbol.asyncIterator](); | ||
[Symbol.asyncIterator]() { | ||
return this.stream[Symbol.asyncIterator]() | ||
} | ||
/** | ||
* Alias of the FormData#[util.inspect.custom]() | ||
* | ||
* @return {string} | ||
* | ||
* @public | ||
* @method | ||
*/ | ||
/** | ||
@@ -664,4 +596,5 @@ * Returns a string representation of the FormData | ||
toString() { | ||
return "[object FormData]"; | ||
return "[object FormData]" | ||
} | ||
/** | ||
@@ -673,63 +606,8 @@ * @type {string} | ||
*/ | ||
[_inspect$custom]() { | ||
return "FormData"; | ||
[inspect.custom]() { | ||
return "FormData" | ||
} | ||
} | ||
}), _temp), (_descriptor = (0, _applyDecoratedDescriptor2.default)(_class.prototype, "boundary", [_readOnly.default], { | ||
configurable: true, | ||
enumerable: true, | ||
writable: true, | ||
initializer: function () { | ||
return `NodeJSFormDataStreamBoundary${(0, _boundary.default)()}`; | ||
} | ||
}), _descriptor2 = (0, _applyDecoratedDescriptor2.default)(_class.prototype, "headers", [_readOnly.default], { | ||
configurable: true, | ||
enumerable: true, | ||
writable: true, | ||
initializer: function () { | ||
return freeze({ | ||
"Content-Type": `multipart/form-data; boundary=${this.boundary}` | ||
}); | ||
} | ||
}), _descriptor3 = (0, _applyDecoratedDescriptor2.default)(_class.prototype, "__carriage", [_readOnly.default], { | ||
configurable: true, | ||
enumerable: true, | ||
writable: true, | ||
initializer: function () { | ||
return "\r\n"; | ||
} | ||
}), _descriptor4 = (0, _applyDecoratedDescriptor2.default)(_class.prototype, "__dashes", [_readOnly.default], { | ||
configurable: true, | ||
enumerable: true, | ||
writable: true, | ||
initializer: function () { | ||
return "-".repeat(2); | ||
} | ||
}), _descriptor5 = (0, _applyDecoratedDescriptor2.default)(_class.prototype, "__footer", [_readOnly.default], { | ||
configurable: true, | ||
enumerable: true, | ||
writable: true, | ||
initializer: function () { | ||
return `${this.__dashes}${this.boundary}${this.__dashes}` + `${this.__carriage.repeat(2)}`; | ||
} | ||
}), _descriptor6 = (0, _applyDecoratedDescriptor2.default)(_class.prototype, "__defaultContentType", [_readOnly.default], { | ||
configurable: true, | ||
enumerable: true, | ||
writable: true, | ||
initializer: function () { | ||
return "application/octet-stream"; | ||
} | ||
}), _descriptor7 = (0, _applyDecoratedDescriptor2.default)(_class.prototype, "__content", [_readOnly.default], { | ||
configurable: true, | ||
enumerable: true, | ||
writable: true, | ||
initializer: function () { | ||
return new Map(); | ||
} | ||
})), _class); | ||
var _default = FormData; | ||
exports.default = _default; | ||
module.exports = exports.default; | ||
module.exports.default = exports.default; | ||
module.exports = FormData | ||
module.exports.default = FormData |
@@ -1,12 +0,3 @@ | ||
"use strict"; | ||
const {randomBytes} = require("crypto") | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
var _crypto = _interopRequireDefault(require("crypto")); | ||
/** | ||
@@ -17,7 +8,4 @@ * @api private | ||
*/ | ||
const boundary = () => _crypto.default.randomBytes(16).toString("hex"); | ||
const boundary = () => randomBytes(16).toString("hex") | ||
var _default = boundary; | ||
exports.default = _default; | ||
module.exports = exports.default; | ||
module.exports.default = exports.default; | ||
module.exports = boundary |
@@ -1,81 +0,62 @@ | ||
"use strict"; | ||
const {Readable} = require("stream") | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
const mime = require("mime-types") | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
const getStreamIterator = require("./getStreamIterator") | ||
const isBlob = require("./isBlob") | ||
var _stream = _interopRequireDefault(require("stream")); | ||
const {isBuffer} = Buffer | ||
var _mimeTypes = _interopRequireDefault(require("mime-types")); | ||
var _getStreamIterator = _interopRequireDefault(require("./getStreamIterator")); | ||
var _isBlob = _interopRequireDefault(require("./isBlob")); | ||
const { | ||
isBuffer | ||
} = Buffer; | ||
const { | ||
Readable | ||
} = _stream.default; | ||
/** | ||
* @api private | ||
*/ | ||
class File { | ||
constructor(content, name, options = {}) { | ||
this.name = name; | ||
this.type = options.type || _mimeTypes.default.lookup(name) || ""; | ||
this.size = options.size || 0; | ||
this.lastModified = options.lastModified || Date.now(); | ||
this.__content = content; | ||
this.name = name | ||
this.type = options.type || mime.lookup(name) || "" | ||
this.size = options.size || 0 | ||
this.lastModified = options.lastModified || Date.now() | ||
this.__content = content | ||
} | ||
stream() { | ||
const content = this.__content; | ||
const content = this.__content | ||
if ((0, _isBlob.default)(content)) { | ||
return content.stream(); | ||
if (isBlob(content)) { | ||
return content.stream() | ||
} | ||
if (isBuffer(content)) { | ||
const readable = new Readable({ | ||
read() {} | ||
const readable = new Readable({read() { }}) | ||
}); | ||
readable.push(content); | ||
readable.push(null); | ||
return readable; | ||
readable.push(content) | ||
readable.push(null) | ||
return readable | ||
} | ||
return content; | ||
return content | ||
} | ||
async arrayBuffer() { | ||
const iterable = (0, _getStreamIterator.default)(this.stream()); | ||
const chunks = []; | ||
const iterable = getStreamIterator(this.stream()) | ||
const chunks = [] | ||
for await (const chunk of iterable) { | ||
chunks.push(chunk); | ||
chunks.push(chunk) | ||
} | ||
return Buffer.concat(chunks).buffer; | ||
return Buffer.concat(chunks).buffer | ||
} | ||
toString() { | ||
return "[object File]"; | ||
return "[object File]" | ||
} | ||
get [Symbol.toStringTag]() { | ||
return "File"; | ||
return "File" | ||
} | ||
} | ||
var _default = File; | ||
exports.default = _default; | ||
module.exports = exports.default; | ||
module.exports.default = exports.default; | ||
module.exports = File |
@@ -1,24 +0,10 @@ | ||
"use strict"; | ||
const {promises: fs} = require("fs") | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
const isReadStream = require("./isReadStream") | ||
const isStream = require("./isStream") | ||
const isBlob = require("./isBlob") | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
const {isBuffer} = Buffer | ||
const {stat} = fs | ||
var _fs = _interopRequireDefault(require("fs")); | ||
var _isReadStream = _interopRequireDefault(require("./isReadStream")); | ||
var _isStream = _interopRequireDefault(require("./isStream")); | ||
var _isBlob = _interopRequireDefault(require("./isBlob")); | ||
const { | ||
isBuffer | ||
} = Buffer; | ||
const { | ||
stat | ||
} = _fs.default.promises; | ||
/** | ||
@@ -33,28 +19,22 @@ * Get lenght of given value (in bytes) | ||
*/ | ||
async function getLength(value) { | ||
if ((0, _isStream.default)(value)) { | ||
if (!(0, _isReadStream.default)(value)) { | ||
return undefined; | ||
if (isStream(value)) { | ||
if (!isReadStream(value)) { | ||
return undefined | ||
} | ||
return stat(value.path).then(({ | ||
size | ||
}) => size); | ||
return stat(value.path).then(({size}) => size) | ||
} | ||
if (isBuffer(value)) { | ||
return value.length; | ||
return value.length | ||
} | ||
if ((0, _isBlob.default)(value)) { | ||
return value.size; | ||
if (isBlob(value)) { | ||
return value.size | ||
} | ||
return Buffer.from(String(value)).length; | ||
return Buffer.from(String(value)).length | ||
} | ||
var _default = getLength; | ||
exports.default = _default; | ||
module.exports = exports.default; | ||
module.exports.default = exports.default; | ||
module.exports = getLength |
@@ -1,14 +0,4 @@ | ||
"use strict"; | ||
const readableStreamIterator = require("./readableStreamIterator") | ||
const isWHATWGReadable = require("./isWHATWGReadable") | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
var _readableStreamIterator = _interopRequireDefault(require("./readableStreamIterator")); | ||
var _isWHATWGReadable = _interopRequireDefault(require("./isWHATWGReadable")); | ||
/** | ||
@@ -24,12 +14,9 @@ * Returns stream iterator for given stream-like object | ||
function getStreamIterator(value) { | ||
if ((0, _isWHATWGReadable.default)(value)) { | ||
return (0, _readableStreamIterator.default)(value.getReader()); | ||
if (isWHATWGReadable(value)) { | ||
return readableStreamIterator(value.getReader()) | ||
} | ||
return value; | ||
return value | ||
} | ||
var _default = getStreamIterator; | ||
exports.default = _default; | ||
module.exports = exports.default; | ||
module.exports.default = exports.default; | ||
module.exports = getStreamIterator |
@@ -1,8 +0,12 @@ | ||
"use strict"; | ||
const basicTypes = [ | ||
"null", | ||
"number", | ||
"object", | ||
"array", | ||
"string", | ||
"function", | ||
"undefined", | ||
"boolean" | ||
] | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
const basicTypes = ["null", "number", "object", "array", "string", "function", "undefined", "boolean"]; | ||
/** | ||
@@ -17,16 +21,12 @@ * Get a string with type name of the given value | ||
*/ | ||
function getType(val) { | ||
const type = Object.prototype.toString.call(val).slice(8, -1); | ||
const type = Object.prototype.toString.call(val).slice(8, -1) | ||
if (basicTypes.includes(type.toLowerCase())) { | ||
return type.toLowerCase(); | ||
return type.toLowerCase() | ||
} | ||
return type; | ||
return type | ||
} | ||
var _default = getType; | ||
exports.default = _default; | ||
module.exports = exports.default; | ||
module.exports.default = exports.default; | ||
module.exports = getType |
@@ -1,17 +0,7 @@ | ||
"use strict"; | ||
const isFunction = require("./isFunction") | ||
const isString = require("./isString") | ||
const isObject = require("./isObject") | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
const names = ["Blob", "File"] | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
var _isFunction = _interopRequireDefault(require("./isFunction")); | ||
var _isString = _interopRequireDefault(require("./isString")); | ||
var _isObject = _interopRequireDefault(require("./isObject")); | ||
const names = ["Blob", "File"]; | ||
/** | ||
@@ -26,8 +16,12 @@ * Check if given valie is Blob or File -like object | ||
*/ | ||
const isBlob = value => ( | ||
isObject(value) | ||
&& isString(value.type) | ||
&& isFunction(value.arrayBuffer) | ||
&& isFunction(value.stream) | ||
&& isFunction(value.constructor) | ||
&& names.includes(value[Symbol.toStringTag] || value.constructor.name) | ||
&& "size" in value | ||
) | ||
const isBlob = value => (0, _isObject.default)(value) && (0, _isString.default)(value.type) && (0, _isFunction.default)(value.arrayBuffer) && (0, _isFunction.default)(value.stream) && (0, _isFunction.default)(value.constructor) && names.includes(value[Symbol.toStringTag] || value.constructor.name) && "size" in value; | ||
var _default = isBlob; | ||
exports.default = _default; | ||
module.exports = exports.default; | ||
module.exports.default = exports.default; | ||
module.exports = isBlob |
@@ -1,16 +0,6 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
/** | ||
* @api private | ||
*/ | ||
const isFunction = value => typeof value === "function"; | ||
const isFunction = value => typeof value === "function" | ||
var _default = isFunction; | ||
exports.default = _default; | ||
module.exports = exports.default; | ||
module.exports.default = exports.default; | ||
module.exports = isFunction |
@@ -1,16 +0,6 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
/** | ||
* @api private | ||
*/ | ||
const isObject = value => typeof value === "object" && value !== null; | ||
const isObject = value => typeof value === "object" && value !== null | ||
var _default = isObject; | ||
exports.default = _default; | ||
module.exports = exports.default; | ||
module.exports.default = exports.default; | ||
module.exports = isObject |
@@ -1,20 +0,8 @@ | ||
"use strict"; | ||
const {Readable} = require("stream") | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
var _stream = _interopRequireDefault(require("stream")); | ||
/** | ||
* @api private | ||
*/ | ||
const isReadable = val => val instanceof _stream.default.Readable; | ||
const isReadable = val => val instanceof Readable | ||
var _default = isReadable; | ||
exports.default = _default; | ||
module.exports = exports.default; | ||
module.exports.default = exports.default; | ||
module.exports = isReadable |
@@ -1,20 +0,8 @@ | ||
"use strict"; | ||
const {ReadStream} = require("fs") | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
var _fs = _interopRequireDefault(require("fs")); | ||
/** | ||
* @api private | ||
*/ | ||
const isReadStream = value => value instanceof _fs.default.ReadStream; | ||
const isReadStream = value => value instanceof ReadStream | ||
var _default = isReadStream; | ||
exports.default = _default; | ||
module.exports = exports.default; | ||
module.exports.default = exports.default; | ||
module.exports = isReadStream |
@@ -1,16 +0,5 @@ | ||
"use strict"; | ||
const isWHATWGReadable = require("./isWHATWGReadable") | ||
const isReadStream = require("./isReadStream") | ||
const isReadable = require("./isReadable") | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
var _isWHATWGReadable = _interopRequireDefault(require("./isWHATWGReadable")); | ||
var _isReadStream = _interopRequireDefault(require("./isReadStream")); | ||
var _isReadable = _interopRequireDefault(require("./isReadable")); | ||
/** | ||
@@ -25,7 +14,6 @@ * Checks if given value is ONLY fs.ReadStream OR stream.Readable instance | ||
*/ | ||
const isStream = value => (0, _isWHATWGReadable.default)(value) || (0, _isReadStream.default)(value) || (0, _isReadable.default)(value); | ||
const isStream = value => ( | ||
isWHATWGReadable(value) || isReadStream(value) || isReadable(value) | ||
) | ||
var _default = isStream; | ||
exports.default = _default; | ||
module.exports = exports.default; | ||
module.exports.default = exports.default; | ||
module.exports = isStream |
@@ -1,16 +0,6 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
/** | ||
* @api private | ||
*/ | ||
const isString = value => typeof value === "string"; | ||
const isString = value => typeof value === "string" | ||
var _default = isString; | ||
exports.default = _default; | ||
module.exports = exports.default; | ||
module.exports.default = exports.default; | ||
module.exports = isString |
@@ -1,14 +0,4 @@ | ||
"use strict"; | ||
const isFunction = require("./isFunction") | ||
const isObject = require("./isObject") | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
var _isFunction = _interopRequireDefault(require("./isFunction")); | ||
var _isObject = _interopRequireDefault(require("./isObject")); | ||
/** | ||
@@ -23,7 +13,12 @@ * Check if given value is ReadableStream | ||
*/ | ||
const isWHATWGReadable = value => (0, _isObject.default)(value) && (0, _isFunction.default)(value.cancel) && (0, _isFunction.default)(value.getReader) && (0, _isFunction.default)(value.pipeTo) && (0, _isFunction.default)(value.pipeThrough) && (0, _isFunction.default)(value.constructor) && value.constructor.name === "ReadableStream"; | ||
const isWHATWGReadable = value => ( | ||
isObject(value) | ||
&& isFunction(value.cancel) | ||
&& isFunction(value.getReader) | ||
&& isFunction(value.pipeTo) | ||
&& isFunction(value.pipeThrough) | ||
&& isFunction(value.constructor) | ||
&& value.constructor.name === "ReadableStream" | ||
) | ||
var _default = isWHATWGReadable; | ||
exports.default = _default; | ||
module.exports = exports.default; | ||
module.exports.default = exports.default; | ||
module.exports = isWHATWGReadable |
@@ -1,8 +0,1 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
/** | ||
@@ -17,18 +10,12 @@ * Reads a content from given ReadableStream | ||
while (true) { | ||
const { | ||
done, | ||
value | ||
} = await reader.read(); | ||
const {done, value} = await reader.read() | ||
if (done) { | ||
return value; | ||
return value | ||
} | ||
yield value; | ||
yield value | ||
} | ||
} | ||
var _default = readableStreamIterator; | ||
exports.default = _default; | ||
module.exports = exports.default; | ||
module.exports.default = exports.default; | ||
module.exports = readableStreamIterator |
@@ -1,16 +0,5 @@ | ||
"use strict"; | ||
const readOnly = (target, key, descriptor) => ({ | ||
...descriptor, writable: false, configurable: false | ||
}) | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
const readOnly = (target, key, descriptor) => ({ ...descriptor, | ||
writable: false, | ||
configurable: false | ||
}); | ||
var _default = readOnly; | ||
exports.default = _default; | ||
module.exports = exports.default; | ||
module.exports.default = exports.default; | ||
module.exports = readOnly |
@@ -1,40 +0,27 @@ | ||
"use strict"; | ||
const isBlob = require("./isBlob") | ||
const File = require("./File") | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
const {isBuffer} = Buffer | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
var _isBlob = _interopRequireDefault(require("./isBlob")); | ||
var _File = _interopRequireDefault(require("./File")); | ||
const { | ||
isBuffer | ||
} = Buffer; | ||
/** | ||
* @api private | ||
*/ | ||
function toFile(value, name, options = {}) { | ||
if (value.constructor.name === "File") { | ||
return value; | ||
return value | ||
} | ||
if (isBuffer(value)) { | ||
options.size = value.length; | ||
} else if ((0, _isBlob.default)(value)) { | ||
options.type = value.type || options.type; | ||
options.size = value.size == null ? options.size : value.size; | ||
options.lastModified = value.lastModified == null ? options.lastModified : value.lastModified; | ||
options.size = value.length | ||
} else if (isBlob(value)) { | ||
options.type = value.type || options.type | ||
options.size = value.size == null ? options.size : value.size | ||
options.lastModified = value.lastModified == null | ||
? options.lastModified | ||
: value.lastModified | ||
} | ||
return new _File.default(value, name, options); | ||
return new File(value, name, options) | ||
} | ||
var _default = toFile; | ||
exports.default = _default; | ||
module.exports = exports.default; | ||
module.exports.default = exports.default; | ||
module.exports = toFile |
{ | ||
"name": "formdata-node", | ||
"version": "2.2.2", | ||
"version": "2.3.0", | ||
"description": "FormData implementation for Node.js. Built over Readable stream and async generators.", | ||
@@ -23,59 +23,33 @@ "repository": "octet-stream/form-data", | ||
"scripts": { | ||
"eslint": "eslint src/**/*.mjs", | ||
"eslint": "eslint lib/**/*.js test/**/*.js ava.config.cjs polyfill.js", | ||
"staged": "lint-staged", | ||
"make:test": "babel src -s -d .", | ||
"prepare": "npm run prepare:mjs && npm run prepare:js", | ||
"prepare:mjs": "BABEL_ESM=1 babel src -d . --keep-file-extension", | ||
"prepare:js": "babel src -d .", | ||
"watch": "babel src -w -d .", | ||
"p": "npm run prepare", | ||
"w": "npm run watch", | ||
"cleanup": "rimraf lib test polyfill.mjs polyfill.js *.map", | ||
"test": "ava", | ||
"test:types": "tsd", | ||
"coverage": "npm run cleanup && npm run make:test && nyc npm run test", | ||
"report": "npm run cleanup && npm run make:test && nyc npm run test && nyc report -r=html", | ||
"ci": "npm run make:test && nyc npm run test && nyc report -r=json" | ||
"coverage": "nyc npm run test", | ||
"report": "nyc npm run test && nyc report -r=html", | ||
"ci": "nyc npm run test && nyc report -r=json" | ||
}, | ||
"nyc": { | ||
"extension": [ | ||
".mjs" | ||
], | ||
"exclude": [ | ||
"test/**", | ||
".babelrc.js" | ||
] | ||
}, | ||
"devDependencies": { | ||
"@babel/cli": "7.10.1", | ||
"@babel/core": "7.10.2", | ||
"@babel/plugin-proposal-class-properties": "7.10.1", | ||
"@babel/plugin-proposal-decorators": "7.10.1", | ||
"@babel/plugin-transform-modules-commonjs": "7.10.1", | ||
"@babel/plugin-transform-runtime": "7.10.1", | ||
"@octetstream/eslint-config": "4.0.0", | ||
"@types/node": "14.0.11", | ||
"ava": "3.8.2", | ||
"babel-plugin-add-module-exports": "1.0.2", | ||
"codecov": "3.7.1", | ||
"eslint": "7.2.0", | ||
"ava": "3.12.1", | ||
"codecov": "3.7.2", | ||
"eslint": "7.7.0", | ||
"eslint-plugin-ava": "10.3.0", | ||
"fetch-blob": "1.0.6", | ||
"husky": "4.2.5", | ||
"lint-staged": "10.2.9", | ||
"lint-staged": "10.2.13", | ||
"lodash.isplainobject": "4.0.6", | ||
"nyc": "15.1.0", | ||
"object-deep-from-entries": "^0.3.0", | ||
"object-deep-from-entries": "0.3.0", | ||
"proxyquire": "2.1.3", | ||
"rimraf": "3.0.2", | ||
"sinon": "9.0.2", | ||
"sinon": "9.0.3", | ||
"supertest": "4.0.2", | ||
"then-busboy": "4.4.0", | ||
"tsd": "0.11.0", | ||
"tsd": "0.13.1", | ||
"web-streams-polyfill": "2.1.1" | ||
}, | ||
"dependencies": { | ||
"@babel/runtime": "7.10.2", | ||
"mime-types": "2.1.27" | ||
} | ||
} |
@@ -1,16 +0,5 @@ | ||
"use strict"; | ||
const FormData = require(".") | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
global.FormData = FormData | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
var _FormData = _interopRequireDefault(require("./lib/FormData")); | ||
global.FormData = _FormData.default; | ||
var _default = _FormData.default; | ||
exports.default = _default; | ||
module.exports = exports.default; | ||
module.exports.default = exports.default; | ||
module.exports = FormData |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
1
18
3
36079
22
921
1
- Removed@babel/runtime@7.10.2
- Removed@babel/runtime@7.10.2(transitive)
- Removedregenerator-runtime@0.13.11(transitive)