traverseFileTree.js 7.5 KB

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