fundus 0.28.1 → 0.29.1

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.
Files changed (190) hide show
  1. package/README.md +41 -33
  2. package/build/client/_app/immutable/chunks/{apKHI4vq.js → C0uU_Rhe.js} +2 -2
  3. package/build/client/_app/immutable/chunks/C0uU_Rhe.js.br +0 -0
  4. package/build/client/_app/immutable/chunks/C0uU_Rhe.js.gz +0 -0
  5. package/build/client/_app/immutable/chunks/{Bsj1ssvc.js → CE3cWlK6.js} +1 -1
  6. package/build/client/_app/immutable/chunks/CE3cWlK6.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/CE3cWlK6.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/{g2rma9Ym.js → CMJ10zbJ.js} +1 -1
  9. package/build/client/_app/immutable/chunks/CMJ10zbJ.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/CMJ10zbJ.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/{QlQ-jeIO.js → Cq3PJxJG.js} +1 -1
  12. package/build/client/_app/immutable/chunks/Cq3PJxJG.js.br +2 -0
  13. package/build/client/_app/immutable/chunks/Cq3PJxJG.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/{OL1Dh1oP.js → Wk7WcyQU.js} +1 -1
  15. package/build/client/_app/immutable/chunks/Wk7WcyQU.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/Wk7WcyQU.js.gz +0 -0
  17. package/build/client/_app/immutable/entry/{app.DpZM49_s.js → app.Dit62aNJ.js} +2 -2
  18. package/build/client/_app/immutable/entry/app.Dit62aNJ.js.br +0 -0
  19. package/build/client/_app/immutable/entry/app.Dit62aNJ.js.gz +0 -0
  20. package/build/client/_app/immutable/entry/start.CCBu6ABN.js +1 -0
  21. package/build/client/_app/immutable/entry/start.CCBu6ABN.js.br +0 -0
  22. package/build/client/_app/immutable/entry/start.CCBu6ABN.js.gz +0 -0
  23. package/build/client/_app/immutable/nodes/{0.Wqvn8XD-.js → 0.DnyKXqLr.js} +1 -1
  24. package/build/client/_app/immutable/nodes/0.DnyKXqLr.js.br +0 -0
  25. package/build/client/_app/immutable/nodes/0.DnyKXqLr.js.gz +0 -0
  26. package/build/client/_app/immutable/nodes/{1.Z-UvvLkP.js → 1.Cz-4S6LF.js} +1 -1
  27. package/build/client/_app/immutable/nodes/1.Cz-4S6LF.js.br +0 -0
  28. package/build/client/_app/immutable/nodes/1.Cz-4S6LF.js.gz +0 -0
  29. package/build/client/_app/immutable/nodes/{2.lu89W_qJ.js → 2.C75-hsCY.js} +1 -1
  30. package/build/client/_app/immutable/nodes/2.C75-hsCY.js.br +0 -0
  31. package/build/client/_app/immutable/nodes/2.C75-hsCY.js.gz +0 -0
  32. package/build/client/_app/immutable/nodes/{3.Dt32EAoq.js → 3.4pSddugU.js} +1 -1
  33. package/build/client/_app/immutable/nodes/3.4pSddugU.js.br +0 -0
  34. package/build/client/_app/immutable/nodes/3.4pSddugU.js.gz +0 -0
  35. package/build/client/_app/immutable/nodes/{4.WipzcX8_.js → 4.KoQxJEWQ.js} +1 -1
  36. package/build/client/_app/immutable/nodes/4.KoQxJEWQ.js.br +0 -0
  37. package/build/client/_app/immutable/nodes/4.KoQxJEWQ.js.gz +0 -0
  38. package/build/client/_app/version.json +1 -1
  39. package/build/client/_app/version.json.br +0 -0
  40. package/build/client/_app/version.json.gz +0 -0
  41. package/build/handler.js +7 -7
  42. package/build/index.js +7 -7
  43. package/build/server/chunks/chunks/{context.js-BZSZNuAd.js → context.js-BR2IRl9z.js} +205 -115
  44. package/build/server/chunks/chunks/context.js-BR2IRl9z.js.map +1 -0
  45. package/build/server/chunks/chunks/{contract.js-B4JdXFgm.js → contract.js-DHeIVVv8.js} +46 -12
  46. package/build/server/chunks/chunks/contract.js-DHeIVVv8.js.map +1 -0
  47. package/build/server/chunks/chunks/{core.js-BHxa3VBo.js → core.js-AGKlECJ0.js} +32 -32
  48. package/build/server/chunks/chunks/core.js-AGKlECJ0.js.map +1 -0
  49. package/build/server/chunks/chunks/{exports.js-D0dALD2Q.js → exports.js-CNZgoxR0.js} +2 -2
  50. package/build/server/chunks/chunks/{exports.js-D0dALD2Q.js.map → exports.js-CNZgoxR0.js.map} +1 -1
  51. package/build/server/chunks/chunks/{http.js-DYYKvppy.js → http.js-dk5jbOFm.js} +2 -2
  52. package/build/server/chunks/chunks/{http.js-DYYKvppy.js.map → http.js-dk5jbOFm.js.map} +1 -1
  53. package/build/server/chunks/chunks/{internal.js-CJkB_gzV.js → internal.js-DlRiYJji.js} +3 -3
  54. package/build/server/chunks/chunks/{internal.js-CJkB_gzV.js.map → internal.js-DlRiYJji.js.map} +1 -1
  55. package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js.map +1 -1
  56. package/build/server/chunks/chunks/{manifest-membership.js-BkrPsM_r.js → manifest-membership.js-DkHaPk2F.js} +2 -2
  57. package/build/server/chunks/chunks/{manifest-membership.js-BkrPsM_r.js.map → manifest-membership.js-DkHaPk2F.js.map} +1 -1
  58. package/build/server/chunks/chunks/{raw-reconciliation2.js-DKOpJ8if.js → raw-reconciliation.js-Cco4r8lr.js} +52 -18
  59. package/build/server/chunks/chunks/raw-reconciliation.js-Cco4r8lr.js.map +1 -0
  60. package/build/server/chunks/chunks/raw-reconciliation2.js-CuYSsYTP.js +11 -0
  61. package/build/server/chunks/chunks/raw-reconciliation2.js-CuYSsYTP.js.map +1 -0
  62. package/build/server/chunks/chunks/{shared.js-D3ZDVUlh.js → shared.js-C6qC0jnA.js} +2 -2
  63. package/build/server/chunks/chunks/{shared.js-D3ZDVUlh.js.map → shared.js-C6qC0jnA.js.map} +1 -1
  64. package/build/server/chunks/chunks/{utils.js-CqWW_v-5.js → utils.js-BZ32hXFI.js} +3 -3
  65. package/build/server/chunks/chunks/{utils.js-CqWW_v-5.js.map → utils.js-BZ32hXFI.js.map} +1 -1
  66. package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-Dw2MW5Tm.js → _server.ts.js-8jGLP2Aj.js} +6 -6
  67. package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-Dw2MW5Tm.js.map → _server.ts.js-8jGLP2Aj.js.map} +1 -1
  68. package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-GQDuJGug.js → _server.ts.js-BOW9Ejim.js} +7 -7
  69. package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-GQDuJGug.js.map → _server.ts.js-BOW9Ejim.js.map} +1 -1
  70. package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-JbLSv7Xx.js → _server.ts.js-Clac8atJ.js} +7 -7
  71. package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-JbLSv7Xx.js.map → _server.ts.js-Clac8atJ.js.map} +1 -1
  72. package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-BPae-BYF.js → _server.ts.js-EdHTA-SO.js} +7 -7
  73. package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-BPae-BYF.js.map → _server.ts.js-EdHTA-SO.js.map} +1 -1
  74. package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/{_server.ts.js-BafrrUxu.js → _server.ts.js-ZBCRgRYi.js} +7 -7
  75. package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/{_server.ts.js-BafrrUxu.js.map → _server.ts.js-ZBCRgRYi.js.map} +1 -1
  76. package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-UOlSNEi9.js → _server.ts.js-DY_e5K6d.js} +7 -7
  77. package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-UOlSNEi9.js.map → _server.ts.js-DY_e5K6d.js.map} +1 -1
  78. package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-QE1vUuAx.js → _server.ts.js-Cl2jxJNi.js} +7 -7
  79. package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-QE1vUuAx.js.map → _server.ts.js-Cl2jxJNi.js.map} +1 -1
  80. package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DIVfppGt.js → _server.ts.js-DrrZWUbd.js} +7 -7
  81. package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DIVfppGt.js.map → _server.ts.js-DrrZWUbd.js.map} +1 -1
  82. package/build/server/chunks/entries/endpoints/api/events/{_server.ts.js-B6R_kqP8.js → _server.ts.js-Bnw0HbEk.js} +7 -7
  83. package/build/server/chunks/entries/endpoints/api/events/{_server.ts.js-B6R_kqP8.js.map → _server.ts.js-Bnw0HbEk.js.map} +1 -1
  84. package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-CertbDsH.js → _server.ts.js-NeVn2ap9.js} +7 -7
  85. package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-CertbDsH.js.map → _server.ts.js-NeVn2ap9.js.map} +1 -1
  86. package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-DEIF3Hu2.js → _server.ts.js-ENGDgoLy.js} +7 -7
  87. package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-DEIF3Hu2.js.map → _server.ts.js-ENGDgoLy.js.map} +1 -1
  88. package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-DNFsNGr4.js → _server.ts.js-BQVGCzBR.js} +7 -7
  89. package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-DNFsNGr4.js.map → _server.ts.js-BQVGCzBR.js.map} +1 -1
  90. package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-DDW8XRPe.js → _server.ts.js-Pxver0Y-.js} +7 -7
  91. package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-DDW8XRPe.js.map → _server.ts.js-Pxver0Y-.js.map} +1 -1
  92. package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-C222-xli.js → _server.ts.js-DYtiqzJq.js} +7 -7
  93. package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-C222-xli.js.map → _server.ts.js-DYtiqzJq.js.map} +1 -1
  94. package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-CI1P1uyd.js → _server.ts.js-lBgmEZHV.js} +7 -7
  95. package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-CI1P1uyd.js.map → _server.ts.js-lBgmEZHV.js.map} +1 -1
  96. package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-DpiUwaSh.js → _server.ts.js-BJHyONFH.js} +7 -7
  97. package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-DpiUwaSh.js.map → _server.ts.js-BJHyONFH.js.map} +1 -1
  98. package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-DT0VPqPT.js → _server.ts.js-Bm5XO80W.js} +7 -7
  99. package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-DT0VPqPT.js.map → _server.ts.js-Bm5XO80W.js.map} +1 -1
  100. package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-DBpHM42g.js → _server.ts.js-B7Z20kYf.js} +7 -7
  101. package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-DBpHM42g.js.map → _server.ts.js-B7Z20kYf.js.map} +1 -1
  102. package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-Cxu5b6Au.js → _server.ts.js-Cg-f37jc.js} +7 -7
  103. package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-Cxu5b6Au.js.map → _server.ts.js-Cg-f37jc.js.map} +1 -1
  104. package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-W4dhMo8Y.js → _server.ts.js-dIXZiq5l.js} +7 -7
  105. package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-W4dhMo8Y.js.map → _server.ts.js-dIXZiq5l.js.map} +1 -1
  106. package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-DJ_adxbT.js → _server.ts.js-CnTrS5pT.js} +7 -7
  107. package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-DJ_adxbT.js.map → _server.ts.js-CnTrS5pT.js.map} +1 -1
  108. package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-BisoHihD.js → _server.ts.js-B7TcFRuL.js} +6 -6
  109. package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-BisoHihD.js.map → _server.ts.js-B7TcFRuL.js.map} +1 -1
  110. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-D4jLLuko.js → _server.ts.js-BkUQInqW.js} +7 -7
  111. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-D4jLLuko.js.map → _server.ts.js-BkUQInqW.js.map} +1 -1
  112. package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-Dfv2ItjT.js → _server.ts.js-CshyvqOq.js} +7 -7
  113. package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-Dfv2ItjT.js.map → _server.ts.js-CshyvqOq.js.map} +1 -1
  114. package/build/server/chunks/entries/{hooks.server.js-oHJX5INm.js → hooks.server.js-D4DECjz_.js} +8 -7
  115. package/build/server/chunks/entries/hooks.server.js-D4DECjz_.js.map +1 -0
  116. package/build/server/chunks/{handler-BAe0c9yw.js → handler-Cna54zf6.js} +5 -5
  117. package/build/server/chunks/{handler-BAe0c9yw.js.map → handler-Cna54zf6.js.map} +1 -1
  118. package/build/server/chunks/{index.js-DUYD4JB0.js → index.js-BnpHWDec.js} +5 -5
  119. package/build/server/chunks/{index.js-DUYD4JB0.js.map → index.js-BnpHWDec.js.map} +1 -1
  120. package/build/server/chunks/{manifest.js-zwun-T7O.js → manifest.js-9WMEOpxH.js} +31 -31
  121. package/build/server/chunks/{manifest.js-zwun-T7O.js.map → manifest.js-9WMEOpxH.js.map} +1 -1
  122. package/build/server/chunks/nodes/{0.js-BmkXwDRY.js → 0.js-C2b1a672.js} +2 -2
  123. package/build/server/chunks/nodes/{0.js-BmkXwDRY.js.map → 0.js-C2b1a672.js.map} +1 -1
  124. package/build/server/chunks/nodes/1.js-P3Ai28oj.js +7 -0
  125. package/build/server/chunks/nodes/{1.js-xbOwEHCW.js.map → 1.js-P3Ai28oj.js.map} +1 -1
  126. package/build/server/chunks/nodes/{2.js-BuNw1vTZ.js → 2.js-sM3j5BqB.js} +2 -2
  127. package/build/server/chunks/nodes/{2.js-BuNw1vTZ.js.map → 2.js-sM3j5BqB.js.map} +1 -1
  128. package/build/server/chunks/nodes/3.js-G0jV-ymM.js +7 -0
  129. package/build/server/chunks/nodes/{3.js-Dpr_DvNU.js.map → 3.js-G0jV-ymM.js.map} +1 -1
  130. package/build/server/chunks/nodes/4.js-BUTPrI45.js +7 -0
  131. package/build/server/chunks/nodes/{4.js-14Lypd4o.js.map → 4.js-BUTPrI45.js.map} +1 -1
  132. package/dist/cli.js +3 -4
  133. package/dist/core/figma-tag-links.d.ts +66 -0
  134. package/dist/core/figma-tag-links.js +97 -0
  135. package/dist/core/index.d.ts +2 -2
  136. package/dist/core/index.js +1 -1
  137. package/dist/server/cli-commands.d.ts +1 -1
  138. package/dist/server/cli-commands.js +1 -1
  139. package/dist/server/cli-figma-tags.d.ts +1 -1
  140. package/dist/server/cli-figma-tags.js +149 -88
  141. package/dist/server/concurrency.d.ts +12 -0
  142. package/dist/server/concurrency.js +23 -0
  143. package/dist/server/figma-tags.d.ts +72 -24
  144. package/dist/server/figma-tags.js +130 -79
  145. package/dist/server/image-duplicates.js +6 -4
  146. package/dist/server/importers/figma.d.ts +20 -15
  147. package/dist/server/importers/figma.js +172 -92
  148. package/dist/server/operations.d.ts +7 -0
  149. package/dist/server/operations.js +53 -26
  150. package/dist/server/processing/processor.d.ts +29 -1
  151. package/dist/server/processing/processor.js +42 -5
  152. package/dist/server/raw-reconciliation.js +26 -10
  153. package/package.json +1 -1
  154. package/build/client/_app/immutable/chunks/Bsj1ssvc.js.br +0 -0
  155. package/build/client/_app/immutable/chunks/Bsj1ssvc.js.gz +0 -0
  156. package/build/client/_app/immutable/chunks/OL1Dh1oP.js.br +0 -0
  157. package/build/client/_app/immutable/chunks/OL1Dh1oP.js.gz +0 -0
  158. package/build/client/_app/immutable/chunks/QlQ-jeIO.js.br +0 -2
  159. package/build/client/_app/immutable/chunks/QlQ-jeIO.js.gz +0 -0
  160. package/build/client/_app/immutable/chunks/apKHI4vq.js.br +0 -0
  161. package/build/client/_app/immutable/chunks/apKHI4vq.js.gz +0 -0
  162. package/build/client/_app/immutable/chunks/g2rma9Ym.js.br +0 -0
  163. package/build/client/_app/immutable/chunks/g2rma9Ym.js.gz +0 -0
  164. package/build/client/_app/immutable/entry/app.DpZM49_s.js.br +0 -0
  165. package/build/client/_app/immutable/entry/app.DpZM49_s.js.gz +0 -0
  166. package/build/client/_app/immutable/entry/start.B3EMVPEN.js +0 -1
  167. package/build/client/_app/immutable/entry/start.B3EMVPEN.js.br +0 -0
  168. package/build/client/_app/immutable/entry/start.B3EMVPEN.js.gz +0 -0
  169. package/build/client/_app/immutable/nodes/0.Wqvn8XD-.js.br +0 -0
  170. package/build/client/_app/immutable/nodes/0.Wqvn8XD-.js.gz +0 -0
  171. package/build/client/_app/immutable/nodes/1.Z-UvvLkP.js.br +0 -0
  172. package/build/client/_app/immutable/nodes/1.Z-UvvLkP.js.gz +0 -0
  173. package/build/client/_app/immutable/nodes/2.lu89W_qJ.js.br +0 -0
  174. package/build/client/_app/immutable/nodes/2.lu89W_qJ.js.gz +0 -0
  175. package/build/client/_app/immutable/nodes/3.Dt32EAoq.js.br +0 -0
  176. package/build/client/_app/immutable/nodes/3.Dt32EAoq.js.gz +0 -0
  177. package/build/client/_app/immutable/nodes/4.WipzcX8_.js.br +0 -0
  178. package/build/client/_app/immutable/nodes/4.WipzcX8_.js.gz +0 -0
  179. package/build/server/chunks/chunks/context.js-BZSZNuAd.js.map +0 -1
  180. package/build/server/chunks/chunks/contract.js-B4JdXFgm.js.map +0 -1
  181. package/build/server/chunks/chunks/core.js-BHxa3VBo.js.map +0 -1
  182. package/build/server/chunks/chunks/raw-reconciliation.js-DPnNXe0b.js +0 -11
  183. package/build/server/chunks/chunks/raw-reconciliation.js-DPnNXe0b.js.map +0 -1
  184. package/build/server/chunks/chunks/raw-reconciliation2.js-DKOpJ8if.js.map +0 -1
  185. package/build/server/chunks/entries/hooks.server.js-oHJX5INm.js.map +0 -1
  186. package/build/server/chunks/nodes/1.js-xbOwEHCW.js +0 -7
  187. package/build/server/chunks/nodes/3.js-Dpr_DvNU.js +0 -7
  188. package/build/server/chunks/nodes/4.js-14Lypd4o.js +0 -7
  189. package/dist/core/figma-tag-script.d.ts +0 -154
  190. package/dist/core/figma-tag-script.js +0 -248
@@ -3,6 +3,7 @@ import { constants } from 'node:fs';
3
3
  import { lstat, open, readdir } from 'node:fs/promises';
4
4
  import { join } from 'node:path';
5
5
  import { compareCodeUnits, folderPathError, isFundusTransactionName, portableRawPathKey, rawFilePathError } from '../core/index.js';
6
+ import { IO_CONCURRENCY, mapConcurrent } from './concurrency.js';
6
7
  function objectIdentity(value) {
7
8
  return `${value.dev}:${value.ino}:${value.mode}`;
8
9
  }
@@ -58,6 +59,8 @@ export async function scanRawDirectory(rawDir, includeFile = () => true) {
58
59
  const occupiedPaths = new Set();
59
60
  const entryKinds = new Map();
60
61
  const ignoredRegularPaths = [];
62
+ const pendingHashes = [];
63
+ const visitedDirectories = [];
61
64
  let complete = true;
62
65
  function markIncomplete(path, reason) {
63
66
  complete = false;
@@ -112,15 +115,7 @@ export async function scanRawDirectory(rawDir, includeFile = () => true) {
112
115
  blockers.push({ path, reason: problem });
113
116
  continue;
114
117
  }
115
- try {
116
- files.push({ path, hash: await stableRawFileHash(join(rawDir, path)) });
117
- }
118
- catch (cause) {
119
- blockers.push({
120
- path,
121
- reason: `Could not obtain a stable file hash: ${cause instanceof Error ? cause.message : String(cause)}`
122
- });
123
- }
118
+ pendingHashes.push(path);
124
119
  continue;
125
120
  }
126
121
  const kind = entry.isSymbolicLink() ? 'symlink' : 'special';
@@ -128,6 +123,28 @@ export async function scanRawDirectory(rawDir, includeFile = () => true) {
128
123
  entryKinds.set(path, kind);
129
124
  blockers.push({ path, reason: 'Symlinks and special files are not supported.' });
130
125
  }
126
+ visitedDirectories.push({ folder, absolutePath, before });
127
+ }
128
+ await visit('');
129
+ // Hashing dominates the scan, so it runs concurrently once the tree is known.
130
+ // Every hash verifies its own file, and directory identities are re-checked
131
+ // only afterwards so that check still spans the whole scan.
132
+ const hashes = await mapConcurrent(pendingHashes, IO_CONCURRENCY, async (path) => {
133
+ try {
134
+ return { hash: await stableRawFileHash(join(rawDir, path)) };
135
+ }
136
+ catch (cause) {
137
+ return { error: cause instanceof Error ? cause.message : String(cause) };
138
+ }
139
+ });
140
+ pendingHashes.forEach((path, index) => {
141
+ const result = hashes[index];
142
+ if (result.hash !== undefined)
143
+ files.push({ path, hash: result.hash });
144
+ else
145
+ blockers.push({ path, reason: `Could not obtain a stable file hash: ${result.error}` });
146
+ });
147
+ for (const { folder, absolutePath, before } of visitedDirectories) {
131
148
  try {
132
149
  const after = await lstat(absolutePath, { bigint: true });
133
150
  if (!after.isDirectory() || objectIdentity(before) !== objectIdentity(after)) {
@@ -138,7 +155,6 @@ export async function scanRawDirectory(rawDir, includeFile = () => true) {
138
155
  markIncomplete(folder, `${folder === '' ? 'Raw directory' : `Directory "${folder}"`} changed during traversal: ${cause instanceof Error ? cause.message : String(cause)}`);
139
156
  }
140
157
  }
141
- await visit('');
142
158
  const collisions = new Map();
143
159
  for (const path of [...occupiedPaths].sort(compareCodeUnits)) {
144
160
  const key = portableRawPathKey(path);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fundus",
3
- "version": "0.28.1",
3
+ "version": "0.29.1",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,2 +0,0 @@
1
- I@�v�Ǖ�K�՘�Jo�Teia8�e-ȑs8;���%D�sjL#T��r�Q���Qm�/�0 ��B��Uc�I~Gkn�E
2
- �
@@ -1 +0,0 @@
1
- import{c as e,r as t}from"../chunks/Bsj1ssvc.js";export{e as load_css,t as start};