UNPKG

@nexusapp/extract-files

Version:

Clones a value, recursively extracting File, Blob and ReactNativeFile instances with their object paths, replacing them with null. FileList instances are treated as File instance arrays.

77 lines (65 loc) 1.65 kB
'use strict'; var defaultIsExtractableFile = require('./isExtractableFile.js'); module.exports = function extractFiles( value, path, isExtractableFile, parentAddFile ) { if (path === void 0) { path = ''; } if (isExtractableFile === void 0) { isExtractableFile = defaultIsExtractableFile; } var clone; var files = new Map(); var addFile = parentAddFile || function (paths, file) { var stored = files.get(file); if (stored) { var _stored$; (_stored$ = stored[1]).push.apply(_stored$, paths); return stored[0]; } var id = '' + files.size; files.set(file, [id, paths]); return id; }; if (isExtractableFile(value)) clone = addFile([path], value); else { var prefix = path ? path + '.' : ''; if (typeof FileList !== 'undefined' && value instanceof FileList) clone = Array.prototype.map.call(value, function (file, i) { var key = '' + prefix + i; return addFile([key], file); }); else if (Array.isArray(value)) clone = value.map(function (child, i) { var result = extractFiles( child, '' + prefix + i, isExtractableFile, addFile ); return result.clone; }); else if (value && value.constructor === Object) { clone = {}; for (var i in value) { var result = extractFiles( value[i], '' + prefix + i, isExtractableFile, addFile ); clone[i] = result.clone; } } else clone = value; } return { clone: clone, files: files, }; };