traverseFileTree.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
  2. import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
  3. import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
  4. // https://github.com/ant-design/ant-design/issues/50080
  5. var traverseFileTree = /*#__PURE__*/function () {
  6. var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(files, isAccepted) {
  7. var flattenFileList, progressFileList, readDirectory, _readDirectory, readFile, _readFile, _traverseFileTree, wipIndex;
  8. return _regeneratorRuntime().wrap(function _callee4$(_context4) {
  9. while (1) switch (_context4.prev = _context4.next) {
  10. case 0:
  11. _readFile = function _readFile3() {
  12. _readFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(item) {
  13. return _regeneratorRuntime().wrap(function _callee3$(_context3) {
  14. while (1) switch (_context3.prev = _context3.next) {
  15. case 0:
  16. return _context3.abrupt("return", new Promise(function (reslove) {
  17. item.file(function (file) {
  18. if (isAccepted(file)) {
  19. // https://github.com/ant-design/ant-design/issues/16426
  20. if (item.fullPath && !file.webkitRelativePath) {
  21. Object.defineProperties(file, {
  22. webkitRelativePath: {
  23. writable: true
  24. }
  25. });
  26. // eslint-disable-next-line no-param-reassign
  27. file.webkitRelativePath = item.fullPath.replace(/^\//, '');
  28. Object.defineProperties(file, {
  29. webkitRelativePath: {
  30. writable: false
  31. }
  32. });
  33. }
  34. reslove(file);
  35. } else {
  36. reslove(null);
  37. }
  38. });
  39. }));
  40. case 1:
  41. case "end":
  42. return _context3.stop();
  43. }
  44. }, _callee3);
  45. }));
  46. return _readFile.apply(this, arguments);
  47. };
  48. readFile = function _readFile2(_x4) {
  49. return _readFile.apply(this, arguments);
  50. };
  51. _readDirectory = function _readDirectory3() {
  52. _readDirectory = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(directory) {
  53. var dirReader, entries, results, n, i;
  54. return _regeneratorRuntime().wrap(function _callee2$(_context2) {
  55. while (1) switch (_context2.prev = _context2.next) {
  56. case 0:
  57. dirReader = directory.createReader();
  58. entries = [];
  59. case 2:
  60. if (!true) {
  61. _context2.next = 12;
  62. break;
  63. }
  64. _context2.next = 5;
  65. return new Promise(function (resolve) {
  66. dirReader.readEntries(resolve, function () {
  67. return resolve([]);
  68. });
  69. });
  70. case 5:
  71. results = _context2.sent;
  72. n = results.length;
  73. if (n) {
  74. _context2.next = 9;
  75. break;
  76. }
  77. return _context2.abrupt("break", 12);
  78. case 9:
  79. for (i = 0; i < n; i++) {
  80. entries.push(results[i]);
  81. }
  82. _context2.next = 2;
  83. break;
  84. case 12:
  85. return _context2.abrupt("return", entries);
  86. case 13:
  87. case "end":
  88. return _context2.stop();
  89. }
  90. }, _callee2);
  91. }));
  92. return _readDirectory.apply(this, arguments);
  93. };
  94. readDirectory = function _readDirectory2(_x3) {
  95. return _readDirectory.apply(this, arguments);
  96. };
  97. flattenFileList = [];
  98. progressFileList = [];
  99. files.forEach(function (file) {
  100. return progressFileList.push(file.webkitGetAsEntry());
  101. });
  102. // eslint-disable-next-line @typescript-eslint/naming-convention
  103. _traverseFileTree = /*#__PURE__*/function () {
  104. var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(item, path) {
  105. var _file, entries;
  106. return _regeneratorRuntime().wrap(function _callee$(_context) {
  107. while (1) switch (_context.prev = _context.next) {
  108. case 0:
  109. if (item) {
  110. _context.next = 2;
  111. break;
  112. }
  113. return _context.abrupt("return");
  114. case 2:
  115. // eslint-disable-next-line no-param-reassign
  116. item.path = path || '';
  117. if (!item.isFile) {
  118. _context.next = 10;
  119. break;
  120. }
  121. _context.next = 6;
  122. return readFile(item);
  123. case 6:
  124. _file = _context.sent;
  125. if (_file) {
  126. flattenFileList.push(_file);
  127. }
  128. _context.next = 15;
  129. break;
  130. case 10:
  131. if (!item.isDirectory) {
  132. _context.next = 15;
  133. break;
  134. }
  135. _context.next = 13;
  136. return readDirectory(item);
  137. case 13:
  138. entries = _context.sent;
  139. progressFileList.push.apply(progressFileList, _toConsumableArray(entries));
  140. case 15:
  141. case "end":
  142. return _context.stop();
  143. }
  144. }, _callee);
  145. }));
  146. return function _traverseFileTree(_x5, _x6) {
  147. return _ref2.apply(this, arguments);
  148. };
  149. }();
  150. wipIndex = 0;
  151. case 9:
  152. if (!(wipIndex < progressFileList.length)) {
  153. _context4.next = 15;
  154. break;
  155. }
  156. _context4.next = 12;
  157. return _traverseFileTree(progressFileList[wipIndex]);
  158. case 12:
  159. wipIndex++;
  160. _context4.next = 9;
  161. break;
  162. case 15:
  163. return _context4.abrupt("return", flattenFileList);
  164. case 16:
  165. case "end":
  166. return _context4.stop();
  167. }
  168. }, _callee4);
  169. }));
  170. return function traverseFileTree(_x, _x2) {
  171. return _ref.apply(this, arguments);
  172. };
  173. }();
  174. export default traverseFileTree;