@react-hive/honey-utils 3.0.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,11 +15,29 @@ __webpack_require__.r(__webpack_exports__);
15
15
  /* harmony export */ compose: () => (/* binding */ compose),
16
16
  /* harmony export */ difference: () => (/* binding */ difference),
17
17
  /* harmony export */ intersection: () => (/* binding */ intersection),
18
+ /* harmony export */ isArray: () => (/* binding */ isArray),
19
+ /* harmony export */ isEmptyArray: () => (/* binding */ isEmptyArray),
18
20
  /* harmony export */ pipe: () => (/* binding */ pipe),
19
21
  /* harmony export */ unique: () => (/* binding */ unique)
20
22
  /* harmony export */ });
21
23
  /* harmony import */ var _guards__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./guards */ "./src/guards.ts");
22
24
 
25
+ /**
26
+ * Checks if a value is an array.
27
+ *
28
+ * @param value - The value to check.
29
+ *
30
+ * @returns `true` if the value is an array; otherwise, `false`.
31
+ */
32
+ const isArray = (value) => Array.isArray(value);
33
+ /**
34
+ * Checks if a value is an empty array.
35
+ *
36
+ * @param value - The value to check.
37
+ *
38
+ * @returns `true` if the value is an empty array; otherwise, `false`.
39
+ */
40
+ const isEmptyArray = (value) => isArray(value) && value.length === 0;
23
41
  /**
24
42
  * Removes all falsy values from an array.
25
43
  *
@@ -182,13 +200,26 @@ __webpack_require__.r(__webpack_exports__);
182
200
  /* harmony export */ filterParallel: () => (/* binding */ filterParallel),
183
201
  /* harmony export */ filterSequential: () => (/* binding */ filterSequential),
184
202
  /* harmony export */ findAsync: () => (/* binding */ findAsync),
203
+ /* harmony export */ isPromise: () => (/* binding */ isPromise),
185
204
  /* harmony export */ reduceAsync: () => (/* binding */ reduceAsync),
186
205
  /* harmony export */ runParallel: () => (/* binding */ runParallel),
187
206
  /* harmony export */ runSequential: () => (/* binding */ runSequential),
188
207
  /* harmony export */ someAsync: () => (/* binding */ someAsync)
189
208
  /* harmony export */ });
190
209
  /* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ "./src/array.ts");
210
+ /* harmony import */ var _function__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./function */ "./src/function.ts");
211
+
191
212
 
213
+ /**
214
+ * Checks if a value is a Promise.
215
+ *
216
+ * @template T - The type of the value that the Promise resolves to.
217
+ *
218
+ * @param value - The value to check.
219
+ *
220
+ * @returns `true` if the value is a Promise; otherwise, `false`.
221
+ */
222
+ const isPromise = (value) => (0,_function__WEBPACK_IMPORTED_MODULE_1__.isFunction)(value?.then);
192
223
  /**
193
224
  * Asynchronously iterates over an array and executes an async function on each item sequentially,
194
225
  * collecting the results.
@@ -567,8 +598,21 @@ __webpack_require__.r(__webpack_exports__);
567
598
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
568
599
  /* harmony export */ blobToFile: () => (/* binding */ blobToFile),
569
600
  /* harmony export */ fileListToFiles: () => (/* binding */ fileListToFiles),
570
- /* harmony export */ parseFileName: () => (/* binding */ parseFileName)
601
+ /* harmony export */ isFile: () => (/* binding */ isFile),
602
+ /* harmony export */ parseFileName: () => (/* binding */ parseFileName),
603
+ /* harmony export */ readFilesFromDataTransfer: () => (/* binding */ readFilesFromDataTransfer),
604
+ /* harmony export */ traverseFileSystemDirectory: () => (/* binding */ traverseFileSystemDirectory)
571
605
  /* harmony export */ });
606
+ /* harmony import */ var _async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./async */ "./src/async.ts");
607
+
608
+ /**
609
+ * Checks if a value is a `File` object.
610
+ *
611
+ * @param value - The value to check.
612
+ *
613
+ * @returns `true` if the value is a `File` object; otherwise, `false`.
614
+ */
615
+ const isFile = (value) => value instanceof File;
572
616
  /**
573
617
  * Splits a file name into its base name and extension.
574
618
  *
@@ -631,6 +675,125 @@ const fileListToFiles = (fileList) => {
631
675
  const blobToFile = (blob, fileName) => new File([blob], fileName, {
632
676
  type: blob.type,
633
677
  });
678
+ /**
679
+ * Reads all entries from a file system directory asynchronously.
680
+ *
681
+ * @param directoryEntry - The directory entry to read.
682
+ *
683
+ * @returns A promise that resolves to all `FileSystemEntry` items in the directory.
684
+ */
685
+ const readFileSystemDirectoryEntries = async (directoryEntry) => {
686
+ const directoryReader = directoryEntry.createReader();
687
+ const readAll = async () => new Promise((resolve, reject) => {
688
+ directoryReader.readEntries(async (entries) => {
689
+ if (!entries.length) {
690
+ resolve([]);
691
+ return;
692
+ }
693
+ try {
694
+ const restEntries = await readAll();
695
+ resolve([...entries, ...restEntries]);
696
+ }
697
+ catch (e) {
698
+ reject(e);
699
+ }
700
+ }, reject);
701
+ });
702
+ return readAll();
703
+ };
704
+ /**
705
+ * Recursively scans a directory using the File System API and collects all nested files.
706
+ *
707
+ * This function walks through all subdirectories, resolving each file into a `File` object.
708
+ * Directories themselves are not returned. To avoid unnecessary noise, certain system or
709
+ * OS-generated files can be excluded via the `skipFiles` option.
710
+ *
711
+ * A progress callback (`onProgress`) may be provided to receive updates each time a file
712
+ * is discovered. This is useful when working with large folders or deeply nested structures.
713
+ *
714
+ * @param directoryEntry - The starting directory entry to traverse.
715
+ * @param options - Optional settings that control traversal behavior.
716
+ * @param processed - Internal counter used to track the number of processed files
717
+ * during recursive traversal. Not intended to be provided manually.
718
+ *
719
+ * @returns A promise resolving to a flat array of all collected `File` objects.
720
+ */
721
+ const traverseFileSystemDirectory = async (directoryEntry, { skipFiles = [
722
+ '.DS_Store',
723
+ 'Thumbs.db',
724
+ 'desktop.ini',
725
+ 'ehthumbs.db',
726
+ '.Spotlight-V100',
727
+ '.Trashes',
728
+ '.fseventsd',
729
+ '__MACOSX',
730
+ ], onProgress, } = {}, processed = 0) => {
731
+ const skipSet = new Set(skipFiles);
732
+ const entries = await readFileSystemDirectoryEntries(directoryEntry);
733
+ const filePromises = await (0,_async__WEBPACK_IMPORTED_MODULE_0__.runParallel)(entries, async (entry) => {
734
+ if (entry.isDirectory) {
735
+ return traverseFileSystemDirectory(entry, {
736
+ skipFiles,
737
+ }, processed);
738
+ }
739
+ else if (!skipSet.has(entry.name)) {
740
+ const file = await new Promise((resolve, reject) => {
741
+ entry.file(resolve, reject);
742
+ });
743
+ if (onProgress) {
744
+ processed++;
745
+ onProgress({
746
+ processed,
747
+ path: `${directoryEntry.fullPath}/${entry.name}`,
748
+ currentFile: file,
749
+ });
750
+ }
751
+ return [file];
752
+ }
753
+ return [];
754
+ });
755
+ return filePromises.flat();
756
+ };
757
+ /**
758
+ * Reads files from a `DataTransfer` object, handling both dropped files
759
+ * and directories (via the non-standard `webkitGetAsEntry` API).
760
+ *
761
+ * @param dataTransfer - The DataTransfer object from a drop or paste event.
762
+ *
763
+ * @returns A promise resolving to a flat array of all extracted File objects.
764
+ */
765
+ const readFilesFromDataTransfer = async (dataTransfer) => {
766
+ const items = dataTransfer?.items;
767
+ if (!items) {
768
+ return [];
769
+ }
770
+ const tasks = [];
771
+ for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
772
+ const item = items[itemIndex];
773
+ // Prefer using webkitGetAsEntry when available (directory support)
774
+ // https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/webkitGetAsEntry#browser_compatibility
775
+ if ('webkitGetAsEntry' in item) {
776
+ // ?.() -> avoids throwing on Safari weirdness
777
+ const entry = item.webkitGetAsEntry?.();
778
+ if (entry?.isDirectory) {
779
+ tasks.push(traverseFileSystemDirectory(entry));
780
+ continue;
781
+ }
782
+ if (entry?.isFile) {
783
+ tasks.push(new Promise((resolve, reject) => {
784
+ entry.file(file => resolve([file]), reject);
785
+ }));
786
+ continue;
787
+ }
788
+ }
789
+ // Fallback to standard API
790
+ const file = item.getAsFile();
791
+ if (file) {
792
+ tasks.push(Promise.resolve([file]));
793
+ }
794
+ }
795
+ return (await Promise.all(tasks)).flat();
796
+ };
634
797
 
635
798
 
636
799
  /***/ }),
@@ -645,12 +808,21 @@ __webpack_require__.r(__webpack_exports__);
645
808
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
646
809
  /* harmony export */ delay: () => (/* binding */ delay),
647
810
  /* harmony export */ invokeIfFunction: () => (/* binding */ invokeIfFunction),
811
+ /* harmony export */ isFunction: () => (/* binding */ isFunction),
648
812
  /* harmony export */ noop: () => (/* binding */ noop),
649
813
  /* harmony export */ not: () => (/* binding */ not),
650
814
  /* harmony export */ retry: () => (/* binding */ retry),
651
815
  /* harmony export */ timeout: () => (/* binding */ timeout)
652
816
  /* harmony export */ });
653
817
  const noop = () => { };
818
+ /**
819
+ * Checks if a value is a function.
820
+ *
821
+ * @param value - The value to check.
822
+ *
823
+ * @returns `true` if the value is a function; otherwise, `false`.
824
+ */
825
+ const isFunction = (value) => typeof value === 'function';
654
826
  /**
655
827
  * Creates a function that negates the result of the given predicate function.
656
828
  *
@@ -818,25 +990,19 @@ const retry = (task, { maxAttempts = 3, delayMs = 300, backoff = true, onRetry }
818
990
  __webpack_require__.r(__webpack_exports__);
819
991
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
820
992
  /* harmony export */ assert: () => (/* binding */ assert),
821
- /* harmony export */ isArray: () => (/* binding */ isArray),
822
993
  /* harmony export */ isBool: () => (/* binding */ isBool),
823
994
  /* harmony export */ isDate: () => (/* binding */ isDate),
824
995
  /* harmony export */ isDefined: () => (/* binding */ isDefined),
825
- /* harmony export */ isEmptyArray: () => (/* binding */ isEmptyArray),
826
996
  /* harmony export */ isEmptyObject: () => (/* binding */ isEmptyObject),
827
997
  /* harmony export */ isFiniteNumber: () => (/* binding */ isFiniteNumber),
828
- /* harmony export */ isFunction: () => (/* binding */ isFunction),
829
998
  /* harmony export */ isInteger: () => (/* binding */ isInteger),
830
999
  /* harmony export */ isMap: () => (/* binding */ isMap),
831
1000
  /* harmony export */ isNil: () => (/* binding */ isNil),
832
- /* harmony export */ isNilOrEmptyString: () => (/* binding */ isNilOrEmptyString),
833
1001
  /* harmony export */ isNull: () => (/* binding */ isNull),
834
1002
  /* harmony export */ isNumber: () => (/* binding */ isNumber),
835
1003
  /* harmony export */ isObject: () => (/* binding */ isObject),
836
- /* harmony export */ isPromise: () => (/* binding */ isPromise),
837
1004
  /* harmony export */ isRegExp: () => (/* binding */ isRegExp),
838
1005
  /* harmony export */ isSet: () => (/* binding */ isSet),
839
- /* harmony export */ isString: () => (/* binding */ isString),
840
1006
  /* harmony export */ isSymbol: () => (/* binding */ isSymbol),
841
1007
  /* harmony export */ isUndefined: () => (/* binding */ isUndefined),
842
1008
  /* harmony export */ isValidDate: () => (/* binding */ isValidDate)
@@ -862,19 +1028,6 @@ const isNull = (value) => value === null;
862
1028
  * @returns `true` if the value is `null` or `undefined`, otherwise `false`.
863
1029
  */
864
1030
  const isNil = (value) => value === undefined || value === null;
865
- /**
866
- * Checks whether the provided value is considered "empty".
867
- *
868
- * A value is considered empty if it is:
869
- * - `null`
870
- * - `undefined`
871
- * - `''`
872
- *
873
- * @param value - The value to check.
874
- *
875
- * @returns `true` if the value is empty; otherwise, `false`.
876
- */
877
- const isNilOrEmptyString = (value) => value === '' || isNil(value);
878
1031
  /**
879
1032
  * Checks if a value is neither `null` nor `undefined`.
880
1033
  *
@@ -883,14 +1036,6 @@ const isNilOrEmptyString = (value) => value === '' || isNil(value);
883
1036
  * @returns `true` if the value is defined (not `null` or `undefined`); otherwise, `false`.
884
1037
  */
885
1038
  const isDefined = (value) => value !== null && value !== undefined;
886
- /**
887
- * Checks if a value is a string.
888
- *
889
- * @param value - The value to check.
890
- *
891
- * @returns `true` if the value is a string; otherwise, `false`.
892
- */
893
- const isString = (value) => typeof value === 'string';
894
1039
  /**
895
1040
  * Checks if a value is a number.
896
1041
  *
@@ -923,40 +1068,6 @@ const isObject = (value) => typeof value === 'object';
923
1068
  * @returns `true` if the value is an empty object; otherwise, `false`.
924
1069
  */
925
1070
  const isEmptyObject = (value) => isObject(value) && !isNull(value) && Object.keys(value).length === 0;
926
- /**
927
- * Checks if a value is an array.
928
- *
929
- * @param value - The value to check.
930
- *
931
- * @returns `true` if the value is an array; otherwise, `false`.
932
- */
933
- const isArray = (value) => Array.isArray(value);
934
- /**
935
- * Checks if a value is an empty array.
936
- *
937
- * @param value - The value to check.
938
- *
939
- * @returns `true` if the value is an empty array; otherwise, `false`.
940
- */
941
- const isEmptyArray = (value) => isArray(value) && value.length === 0;
942
- /**
943
- * Checks if a value is a function.
944
- *
945
- * @param value - The value to check.
946
- *
947
- * @returns `true` if the value is a function; otherwise, `false`.
948
- */
949
- const isFunction = (value) => typeof value === 'function';
950
- /**
951
- * Checks if a value is a Promise.
952
- *
953
- * @template T - The type of the value that the Promise resolves to.
954
- *
955
- * @param value - The value to check.
956
- *
957
- * @returns `true` if the value is a Promise; otherwise, `false`.
958
- */
959
- const isPromise = (value) => isFunction(value?.then);
960
1071
  /**
961
1072
  * Checks if a value is a Date object.
962
1073
  *
@@ -1095,9 +1206,34 @@ __webpack_require__.r(__webpack_exports__);
1095
1206
  /* harmony export */ camelToDashCase: () => (/* binding */ camelToDashCase),
1096
1207
  /* harmony export */ camelToWords: () => (/* binding */ camelToWords),
1097
1208
  /* harmony export */ hashString: () => (/* binding */ hashString),
1209
+ /* harmony export */ isNilOrEmptyString: () => (/* binding */ isNilOrEmptyString),
1210
+ /* harmony export */ isString: () => (/* binding */ isString),
1098
1211
  /* harmony export */ splitStringIntoWords: () => (/* binding */ splitStringIntoWords),
1099
1212
  /* harmony export */ toKebabCase: () => (/* binding */ toKebabCase)
1100
1213
  /* harmony export */ });
1214
+ /* harmony import */ var _guards__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./guards */ "./src/guards.ts");
1215
+
1216
+ /**
1217
+ * Checks if a value is a string.
1218
+ *
1219
+ * @param value - The value to check.
1220
+ *
1221
+ * @returns `true` if the value is a string; otherwise, `false`.
1222
+ */
1223
+ const isString = (value) => typeof value === 'string';
1224
+ /**
1225
+ * Checks whether the provided value is considered "empty".
1226
+ *
1227
+ * A value is considered empty if it is:
1228
+ * - `null`
1229
+ * - `undefined`
1230
+ * - `''`
1231
+ *
1232
+ * @param value - The value to check.
1233
+ *
1234
+ * @returns `true` if the value is empty; otherwise, `false`.
1235
+ */
1236
+ const isNilOrEmptyString = (value) => value === '' || (0,_guards__WEBPACK_IMPORTED_MODULE_0__.isNil)(value);
1101
1237
  /**
1102
1238
  * Converts a string to kebab-case format.
1103
1239
  *
@@ -1297,27 +1433,28 @@ __webpack_require__.r(__webpack_exports__);
1297
1433
  /* harmony export */ intersection: () => (/* reexport safe */ _array__WEBPACK_IMPORTED_MODULE_2__.intersection),
1298
1434
  /* harmony export */ invokeIfFunction: () => (/* reexport safe */ _function__WEBPACK_IMPORTED_MODULE_3__.invokeIfFunction),
1299
1435
  /* harmony export */ isAnchorHtmlElement: () => (/* reexport safe */ _dom__WEBPACK_IMPORTED_MODULE_6__.isAnchorHtmlElement),
1300
- /* harmony export */ isArray: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isArray),
1436
+ /* harmony export */ isArray: () => (/* reexport safe */ _array__WEBPACK_IMPORTED_MODULE_2__.isArray),
1301
1437
  /* harmony export */ isBool: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isBool),
1302
1438
  /* harmony export */ isContentEditableHtmlElement: () => (/* reexport safe */ _dom__WEBPACK_IMPORTED_MODULE_6__.isContentEditableHtmlElement),
1303
1439
  /* harmony export */ isDate: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isDate),
1304
1440
  /* harmony export */ isDefined: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isDefined),
1305
- /* harmony export */ isEmptyArray: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isEmptyArray),
1441
+ /* harmony export */ isEmptyArray: () => (/* reexport safe */ _array__WEBPACK_IMPORTED_MODULE_2__.isEmptyArray),
1306
1442
  /* harmony export */ isEmptyObject: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isEmptyObject),
1443
+ /* harmony export */ isFile: () => (/* reexport safe */ _file__WEBPACK_IMPORTED_MODULE_7__.isFile),
1307
1444
  /* harmony export */ isFiniteNumber: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isFiniteNumber),
1308
- /* harmony export */ isFunction: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isFunction),
1445
+ /* harmony export */ isFunction: () => (/* reexport safe */ _function__WEBPACK_IMPORTED_MODULE_3__.isFunction),
1309
1446
  /* harmony export */ isHtmlElementFocusable: () => (/* reexport safe */ _dom__WEBPACK_IMPORTED_MODULE_6__.isHtmlElementFocusable),
1310
1447
  /* harmony export */ isInteger: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isInteger),
1311
1448
  /* harmony export */ isMap: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isMap),
1312
1449
  /* harmony export */ isNil: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isNil),
1313
- /* harmony export */ isNilOrEmptyString: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isNilOrEmptyString),
1450
+ /* harmony export */ isNilOrEmptyString: () => (/* reexport safe */ _string__WEBPACK_IMPORTED_MODULE_1__.isNilOrEmptyString),
1314
1451
  /* harmony export */ isNull: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isNull),
1315
1452
  /* harmony export */ isNumber: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isNumber),
1316
1453
  /* harmony export */ isObject: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isObject),
1317
- /* harmony export */ isPromise: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isPromise),
1454
+ /* harmony export */ isPromise: () => (/* reexport safe */ _async__WEBPACK_IMPORTED_MODULE_0__.isPromise),
1318
1455
  /* harmony export */ isRegExp: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isRegExp),
1319
1456
  /* harmony export */ isSet: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isSet),
1320
- /* harmony export */ isString: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isString),
1457
+ /* harmony export */ isString: () => (/* reexport safe */ _string__WEBPACK_IMPORTED_MODULE_1__.isString),
1321
1458
  /* harmony export */ isSymbol: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isSymbol),
1322
1459
  /* harmony export */ isUndefined: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isUndefined),
1323
1460
  /* harmony export */ isValidDate: () => (/* reexport safe */ _guards__WEBPACK_IMPORTED_MODULE_4__.isValidDate),
@@ -1326,6 +1463,7 @@ __webpack_require__.r(__webpack_exports__);
1326
1463
  /* harmony export */ parse2DMatrix: () => (/* reexport safe */ _dom__WEBPACK_IMPORTED_MODULE_6__.parse2DMatrix),
1327
1464
  /* harmony export */ parseFileName: () => (/* reexport safe */ _file__WEBPACK_IMPORTED_MODULE_7__.parseFileName),
1328
1465
  /* harmony export */ pipe: () => (/* reexport safe */ _array__WEBPACK_IMPORTED_MODULE_2__.pipe),
1466
+ /* harmony export */ readFilesFromDataTransfer: () => (/* reexport safe */ _file__WEBPACK_IMPORTED_MODULE_7__.readFilesFromDataTransfer),
1329
1467
  /* harmony export */ reduceAsync: () => (/* reexport safe */ _async__WEBPACK_IMPORTED_MODULE_0__.reduceAsync),
1330
1468
  /* harmony export */ retry: () => (/* reexport safe */ _function__WEBPACK_IMPORTED_MODULE_3__.retry),
1331
1469
  /* harmony export */ runParallel: () => (/* reexport safe */ _async__WEBPACK_IMPORTED_MODULE_0__.runParallel),
@@ -1334,6 +1472,7 @@ __webpack_require__.r(__webpack_exports__);
1334
1472
  /* harmony export */ splitStringIntoWords: () => (/* reexport safe */ _string__WEBPACK_IMPORTED_MODULE_1__.splitStringIntoWords),
1335
1473
  /* harmony export */ timeout: () => (/* reexport safe */ _function__WEBPACK_IMPORTED_MODULE_3__.timeout),
1336
1474
  /* harmony export */ toKebabCase: () => (/* reexport safe */ _string__WEBPACK_IMPORTED_MODULE_1__.toKebabCase),
1475
+ /* harmony export */ traverseFileSystemDirectory: () => (/* reexport safe */ _file__WEBPACK_IMPORTED_MODULE_7__.traverseFileSystemDirectory),
1337
1476
  /* harmony export */ unique: () => (/* reexport safe */ _array__WEBPACK_IMPORTED_MODULE_2__.unique)
1338
1477
  /* harmony export */ });
1339
1478
  /* harmony import */ var _async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./async */ "./src/async.ts");