folderview 0.0.0-stage → 0.2.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 (450) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +282 -2
  3. package/dist/cli.js +115 -0
  4. package/dist/client/assets/app.css +1 -0
  5. package/dist/client/assets/chunks/abap-EINPUMCJ.js +1 -0
  6. package/dist/client/assets/chunks/abnfDiagram-S7VZAUFO-W2CM2W6D.js +1 -0
  7. package/dist/client/assets/chunks/actionscript-3-O776AQUO.js +1 -0
  8. package/dist/client/assets/chunks/ada-WLOTXRTV.js +1 -0
  9. package/dist/client/assets/chunks/ahk-EF37A2DY.js +1 -0
  10. package/dist/client/assets/chunks/ahk2-FH4K3CKT.js +1 -0
  11. package/dist/client/assets/chunks/angular-html-ZALQFV2H.js +1 -0
  12. package/dist/client/assets/chunks/angular-ts-4IWMF7QO.js +1 -0
  13. package/dist/client/assets/chunks/apache-44AYOEWM.js +1 -0
  14. package/dist/client/assets/chunks/apex-XRYPID42.js +1 -0
  15. package/dist/client/assets/chunks/apl-5HBALFOI.js +1 -0
  16. package/dist/client/assets/chunks/applescript-2DZEHZEC.js +1 -0
  17. package/dist/client/assets/chunks/ara-ZGZQBLXL.js +1 -0
  18. package/dist/client/assets/chunks/architecture-WOLXFQ4H-EJGENNRL.js +1 -0
  19. package/dist/client/assets/chunks/architectureDiagram-YGSQEFNW-2VHWSKO6.js +36 -0
  20. package/dist/client/assets/chunks/asciidoc-GSQAKCPO.js +1 -0
  21. package/dist/client/assets/chunks/asm-BFURM5BK.js +1 -0
  22. package/dist/client/assets/chunks/astro-VJORWDZJ.js +1 -0
  23. package/dist/client/assets/chunks/awk-BSHTWXXX.js +1 -0
  24. package/dist/client/assets/chunks/ballerina-HAOQJ4B2.js +1 -0
  25. package/dist/client/assets/chunks/bat-OSH45EOF.js +1 -0
  26. package/dist/client/assets/chunks/beancount-RBATIHOV.js +1 -0
  27. package/dist/client/assets/chunks/berry-CZUIOUM4.js +1 -0
  28. package/dist/client/assets/chunks/bibtex-KCL2UWHE.js +1 -0
  29. package/dist/client/assets/chunks/bicep-SZJZB3SG.js +1 -0
  30. package/dist/client/assets/chunks/bird2-XBF5YQQV.js +1 -0
  31. package/dist/client/assets/chunks/blade-Q24LEVFC.js +1 -0
  32. package/dist/client/assets/chunks/blockDiagram-APKKGZFW-53LXSOOT.js +140 -0
  33. package/dist/client/assets/chunks/bpmnIcons-APHXDYXF-FMBRQNTY.js +1 -0
  34. package/dist/client/assets/chunks/bsl-TI44NWFB.js +1 -0
  35. package/dist/client/assets/chunks/c-NLHY4Y4N.js +1 -0
  36. package/dist/client/assets/chunks/c3-BUTEM6PO.js +1 -0
  37. package/dist/client/assets/chunks/c4Diagram-KJ2TOQU5-O53G4GQH.js +38 -0
  38. package/dist/client/assets/chunks/cadence-JIRTEU64.js +1 -0
  39. package/dist/client/assets/chunks/cairo-3W6NVDNW.js +1 -0
  40. package/dist/client/assets/chunks/chapel-BPBJ2E7K.js +1 -0
  41. package/dist/client/assets/chunks/chunk-25KVF5ZE.js +1 -0
  42. package/dist/client/assets/chunks/chunk-2CJKSQOI.js +1 -0
  43. package/dist/client/assets/chunks/chunk-2QIJRTWR.js +1 -0
  44. package/dist/client/assets/chunks/chunk-2ZCRJZGF.js +2 -0
  45. package/dist/client/assets/chunks/chunk-3ILNDZNY.js +213 -0
  46. package/dist/client/assets/chunks/chunk-3M2OOQ7S.js +1 -0
  47. package/dist/client/assets/chunks/chunk-3M57NTNK.js +1 -0
  48. package/dist/client/assets/chunks/chunk-3MR6DCZJ.js +1 -0
  49. package/dist/client/assets/chunks/chunk-3WGHS7F7.js +1 -0
  50. package/dist/client/assets/chunks/chunk-4JK75V33.js +1 -0
  51. package/dist/client/assets/chunks/chunk-4NXNVEWK.js +1 -0
  52. package/dist/client/assets/chunks/chunk-4RNNBDFQ.js +1 -0
  53. package/dist/client/assets/chunks/chunk-4T4NVH7V.js +1 -0
  54. package/dist/client/assets/chunks/chunk-4TFFBC35.js +1 -0
  55. package/dist/client/assets/chunks/chunk-4WYBE67P.js +1 -0
  56. package/dist/client/assets/chunks/chunk-56ITEUFA.js +1 -0
  57. package/dist/client/assets/chunks/chunk-5DXRE7IH.js +1 -0
  58. package/dist/client/assets/chunks/chunk-5IMADCNU.js +1 -0
  59. package/dist/client/assets/chunks/chunk-5XZPGKN4.js +1 -0
  60. package/dist/client/assets/chunks/chunk-6O32UKSP.js +1 -0
  61. package/dist/client/assets/chunks/chunk-7BAEB64Q.js +1 -0
  62. package/dist/client/assets/chunks/chunk-7FMWBHZO.js +1 -0
  63. package/dist/client/assets/chunks/chunk-7GFDITUT.js +1 -0
  64. package/dist/client/assets/chunks/chunk-7H4MLBHI.js +1 -0
  65. package/dist/client/assets/chunks/chunk-7OJ4MEEB.js +1 -0
  66. package/dist/client/assets/chunks/chunk-7RSEISFE.js +1 -0
  67. package/dist/client/assets/chunks/chunk-7YNZZQVT.js +1 -0
  68. package/dist/client/assets/chunks/chunk-AB7TIL2G.js +1 -0
  69. package/dist/client/assets/chunks/chunk-ADDF76FL.js +1 -0
  70. package/dist/client/assets/chunks/chunk-AF6UTCD4.js +321 -0
  71. package/dist/client/assets/chunks/chunk-AJ2K6ASU.js +1 -0
  72. package/dist/client/assets/chunks/chunk-AUBAENQZ.js +1 -0
  73. package/dist/client/assets/chunks/chunk-BJEYVZ65.js +1 -0
  74. package/dist/client/assets/chunks/chunk-BLRM6LXA.js +1 -0
  75. package/dist/client/assets/chunks/chunk-BOCTYCDZ.js +1 -0
  76. package/dist/client/assets/chunks/chunk-BU4VRYN7.js +1 -0
  77. package/dist/client/assets/chunks/chunk-CALYHV7D.js +1 -0
  78. package/dist/client/assets/chunks/chunk-CF4W3RZ4.js +1 -0
  79. package/dist/client/assets/chunks/chunk-DCZ2OBSL.js +1 -0
  80. package/dist/client/assets/chunks/chunk-DUFPBTHD.js +1 -0
  81. package/dist/client/assets/chunks/chunk-DUICIQBC.js +88 -0
  82. package/dist/client/assets/chunks/chunk-EH2N475V.js +1 -0
  83. package/dist/client/assets/chunks/chunk-EHLLNPZT.js +1 -0
  84. package/dist/client/assets/chunks/chunk-EIBFAW37.js +1 -0
  85. package/dist/client/assets/chunks/chunk-EO3ER3GN.js +1 -0
  86. package/dist/client/assets/chunks/chunk-FH24BIIA.js +1 -0
  87. package/dist/client/assets/chunks/chunk-FNOXGAL5.js +2 -0
  88. package/dist/client/assets/chunks/chunk-FTY6WLQF.js +3 -0
  89. package/dist/client/assets/chunks/chunk-FZFME6UK.js +1 -0
  90. package/dist/client/assets/chunks/chunk-FZJZZYYO.js +1 -0
  91. package/dist/client/assets/chunks/chunk-G4Z6L7OO.js +1 -0
  92. package/dist/client/assets/chunks/chunk-GNCEAN2B.js +1 -0
  93. package/dist/client/assets/chunks/chunk-GQJIKV3T.js +1 -0
  94. package/dist/client/assets/chunks/chunk-GUMNOKT2.js +1 -0
  95. package/dist/client/assets/chunks/chunk-GXRORAF3.js +1 -0
  96. package/dist/client/assets/chunks/chunk-H36ABDKY.js +1 -0
  97. package/dist/client/assets/chunks/chunk-HAR5NYVW.js +1 -0
  98. package/dist/client/assets/chunks/chunk-HIGPS4L2.js +1 -0
  99. package/dist/client/assets/chunks/chunk-HMOBGTME.js +1 -0
  100. package/dist/client/assets/chunks/chunk-HNO6SQ7M.js +1 -0
  101. package/dist/client/assets/chunks/chunk-HYVZ3GYN.js +1 -0
  102. package/dist/client/assets/chunks/chunk-I6TGFOQS.js +1 -0
  103. package/dist/client/assets/chunks/chunk-IHIOJK7I.js +1 -0
  104. package/dist/client/assets/chunks/chunk-IHJNUMSC.js +1 -0
  105. package/dist/client/assets/chunks/chunk-IP7PB2OC.js +1 -0
  106. package/dist/client/assets/chunks/chunk-ISDTMH2Y.js +1 -0
  107. package/dist/client/assets/chunks/chunk-J65M2LNT.js +1 -0
  108. package/dist/client/assets/chunks/chunk-JCWYZ7X2.js +62 -0
  109. package/dist/client/assets/chunks/chunk-JENWYTLI.js +1 -0
  110. package/dist/client/assets/chunks/chunk-JJ6YWJQS.js +1 -0
  111. package/dist/client/assets/chunks/chunk-JMUVGGX7.js +32 -0
  112. package/dist/client/assets/chunks/chunk-JNQUFMM4.js +1 -0
  113. package/dist/client/assets/chunks/chunk-JPTECOAL.js +1 -0
  114. package/dist/client/assets/chunks/chunk-JZNK4LKS.js +1 -0
  115. package/dist/client/assets/chunks/chunk-KPNXJBIW.js +1 -0
  116. package/dist/client/assets/chunks/chunk-KZO2GZL7.js +1 -0
  117. package/dist/client/assets/chunks/chunk-L2REESOQ.js +1 -0
  118. package/dist/client/assets/chunks/chunk-LJPJXR7R.js +1 -0
  119. package/dist/client/assets/chunks/chunk-LOEZMLCI.js +1 -0
  120. package/dist/client/assets/chunks/chunk-MLYC6FSE.js +1 -0
  121. package/dist/client/assets/chunks/chunk-MMDGEZYU.js +1 -0
  122. package/dist/client/assets/chunks/chunk-MYXE7CGE.js +1 -0
  123. package/dist/client/assets/chunks/chunk-NBH7YOBD.js +15 -0
  124. package/dist/client/assets/chunks/chunk-NCOVM3YF.js +1 -0
  125. package/dist/client/assets/chunks/chunk-NCWOBVU7.js +1 -0
  126. package/dist/client/assets/chunks/chunk-NLRIHHEH.js +1 -0
  127. package/dist/client/assets/chunks/chunk-NUPEOYK6.js +1 -0
  128. package/dist/client/assets/chunks/chunk-O4MVOA7X.js +1 -0
  129. package/dist/client/assets/chunks/chunk-OBHQQZ4H.js +1 -0
  130. package/dist/client/assets/chunks/chunk-OKPNJIIR.js +1 -0
  131. package/dist/client/assets/chunks/chunk-OLMPB57R.js +1 -0
  132. package/dist/client/assets/chunks/chunk-P2FYOAEV.js +1 -0
  133. package/dist/client/assets/chunks/chunk-PI3SNP4C.js +1 -0
  134. package/dist/client/assets/chunks/chunk-PRDTEROB.js +1 -0
  135. package/dist/client/assets/chunks/chunk-PZELHD2H.js +136 -0
  136. package/dist/client/assets/chunks/chunk-QR2Q34LM.js +1 -0
  137. package/dist/client/assets/chunks/chunk-R4GIXL6S.js +1 -0
  138. package/dist/client/assets/chunks/chunk-RORF4F5V.js +1 -0
  139. package/dist/client/assets/chunks/chunk-S73BYTLL.js +1 -0
  140. package/dist/client/assets/chunks/chunk-SFC5MRYR.js +1 -0
  141. package/dist/client/assets/chunks/chunk-SVM2H22K.js +2 -0
  142. package/dist/client/assets/chunks/chunk-SZ6UCGVD.js +1 -0
  143. package/dist/client/assets/chunks/chunk-SZYM6GIJ.js +127 -0
  144. package/dist/client/assets/chunks/chunk-TT5KJZKM.js +1 -0
  145. package/dist/client/assets/chunks/chunk-UFBKUYNH.js +1 -0
  146. package/dist/client/assets/chunks/chunk-UL57AD4T.js +1 -0
  147. package/dist/client/assets/chunks/chunk-UNEI7LMM.js +1 -0
  148. package/dist/client/assets/chunks/chunk-VNQBBFIY.js +1 -0
  149. package/dist/client/assets/chunks/chunk-WGVITPII.js +1 -0
  150. package/dist/client/assets/chunks/chunk-WRA6KJHX.js +10 -0
  151. package/dist/client/assets/chunks/chunk-WS5EHW43.js +1 -0
  152. package/dist/client/assets/chunks/chunk-XE6SLBBE.js +3 -0
  153. package/dist/client/assets/chunks/chunk-XF5T2P7U.js +72 -0
  154. package/dist/client/assets/chunks/chunk-XFRY5WKO.js +1 -0
  155. package/dist/client/assets/chunks/chunk-XWYV4OPA.js +1 -0
  156. package/dist/client/assets/chunks/chunk-YCE5ECKY.js +1 -0
  157. package/dist/client/assets/chunks/chunk-YIN5CSIF.js +1 -0
  158. package/dist/client/assets/chunks/chunk-YLFUX6XH.js +1 -0
  159. package/dist/client/assets/chunks/chunk-YNXJICZM.js +1 -0
  160. package/dist/client/assets/chunks/chunk-YOHF7NGD.js +1 -0
  161. package/dist/client/assets/chunks/chunk-YORIST7Z.js +1 -0
  162. package/dist/client/assets/chunks/chunk-YUL7CG4R.js +1 -0
  163. package/dist/client/assets/chunks/chunk-YUN7JSFJ.js +2 -0
  164. package/dist/client/assets/chunks/chunk-YZ7D2IT7.js +1 -0
  165. package/dist/client/assets/chunks/chunk-Z7LAPMFJ.js +1 -0
  166. package/dist/client/assets/chunks/chunk-ZE325LPC.js +1 -0
  167. package/dist/client/assets/chunks/chunk-ZN7TN6PO.js +1 -0
  168. package/dist/client/assets/chunks/chunk-ZST3EVPO.js +1 -0
  169. package/dist/client/assets/chunks/chunk-ZZHMDDZN.js +1 -0
  170. package/dist/client/assets/chunks/clarity-RKRYQ7WF.js +1 -0
  171. package/dist/client/assets/chunks/classDiagram-v2-L25IHNXF-Y67HVDZV.js +217 -0
  172. package/dist/client/assets/chunks/clojure-2X2DQECJ.js +1 -0
  173. package/dist/client/assets/chunks/cmake-LH5524XE.js +1 -0
  174. package/dist/client/assets/chunks/cobol-7DALQF3W.js +1 -0
  175. package/dist/client/assets/chunks/codeowners-52SZU5P5.js +1 -0
  176. package/dist/client/assets/chunks/codeql-EISH3KUP.js +1 -0
  177. package/dist/client/assets/chunks/coffee-VAWSGA7Y.js +1 -0
  178. package/dist/client/assets/chunks/common-lisp-4MVK2AN6.js +1 -0
  179. package/dist/client/assets/chunks/coq-4VRYZRZV.js +1 -0
  180. package/dist/client/assets/chunks/core-BRBMZSD2.js +12 -0
  181. package/dist/client/assets/chunks/cose-bilkent-JH36ORCC-BIOOHSAA.js +1 -0
  182. package/dist/client/assets/chunks/cpp-RFECMSKD.js +1 -0
  183. package/dist/client/assets/chunks/crystal-ZBGGFAOI.js +1 -0
  184. package/dist/client/assets/chunks/csharp-BZDPMKKW.js +1 -0
  185. package/dist/client/assets/chunks/css-3WWGM6UD.js +1 -0
  186. package/dist/client/assets/chunks/csv-AB4GNWSB.js +1 -0
  187. package/dist/client/assets/chunks/cue-2E46MZP2.js +1 -0
  188. package/dist/client/assets/chunks/cynefin-EF2NZ3EQ-TLFQLWUN.js +1 -0
  189. package/dist/client/assets/chunks/cynefinDiagram-L36ESFBY-FLPXCSSG.js +62 -0
  190. package/dist/client/assets/chunks/cypher-HR3ILFOL.js +1 -0
  191. package/dist/client/assets/chunks/d-TARSZPOL.js +1 -0
  192. package/dist/client/assets/chunks/dagre-SPEB5RXH-7EGEINJ2.js +4 -0
  193. package/dist/client/assets/chunks/dart-SALLJHVI.js +1 -0
  194. package/dist/client/assets/chunks/dax-WYMRGMXC.js +1 -0
  195. package/dist/client/assets/chunks/desktop-ND5CGLLJ.js +1 -0
  196. package/dist/client/assets/chunks/diagram-3B7GL73J-6USY4HZX.js +200 -0
  197. package/dist/client/assets/chunks/diagram-DNEMPZML-BNSOC4VW.js +24 -0
  198. package/dist/client/assets/chunks/diagram-L3MUGCDN-5V5FZYIG.js +41 -0
  199. package/dist/client/assets/chunks/diagram-LA4NIPWU-25VLY2CO.js +24 -0
  200. package/dist/client/assets/chunks/diagram-MHCOC4E2-G2LFP3JU.js +3 -0
  201. package/dist/client/assets/chunks/diagram-XPFHEONP-E6HBBIBV.js +30 -0
  202. package/dist/client/assets/chunks/diff-PWYGPM7B.js +1 -0
  203. package/dist/client/assets/chunks/docker-A4D7DT7W.js +1 -0
  204. package/dist/client/assets/chunks/dotenv-VWQWV2DY.js +1 -0
  205. package/dist/client/assets/chunks/dream-maker-M5YDQS35.js +1 -0
  206. package/dist/client/assets/chunks/ebnfDiagram-UZSYDL2S-BMXXZZPI.js +1 -0
  207. package/dist/client/assets/chunks/edge-3QXIDJHI.js +1 -0
  208. package/dist/client/assets/chunks/elixir-3OX2UHIZ.js +1 -0
  209. package/dist/client/assets/chunks/elk-XV6XMXQE-IPR65FON.js +27 -0
  210. package/dist/client/assets/chunks/elm-CTS65NCT.js +1 -0
  211. package/dist/client/assets/chunks/emacs-lisp-HHS2IDO7.js +1 -0
  212. package/dist/client/assets/chunks/engine-javascript-DNHSF67B.js +141 -0
  213. package/dist/client/assets/chunks/erDiagram-EYBAPDEH-3GEHFWHG.js +99 -0
  214. package/dist/client/assets/chunks/erb-ICYWK6HS.js +1 -0
  215. package/dist/client/assets/chunks/erlang-BDQPNCKX.js +1 -0
  216. package/dist/client/assets/chunks/eventmodeling-K75KTNOO-B27BJTZL.js +1 -0
  217. package/dist/client/assets/chunks/fennel-4ONBA2PH.js +1 -0
  218. package/dist/client/assets/chunks/fish-ATLPBZSD.js +1 -0
  219. package/dist/client/assets/chunks/flowDiagram-MALGAFMO-5PCLR4AE.js +1 -0
  220. package/dist/client/assets/chunks/fluent-GGMONBVW.js +1 -0
  221. package/dist/client/assets/chunks/fortran-fixed-form-5MSBDRWQ.js +1 -0
  222. package/dist/client/assets/chunks/fortran-free-form-TT3RBL75.js +1 -0
  223. package/dist/client/assets/chunks/fsharp-PAGHNW4O.js +1 -0
  224. package/dist/client/assets/chunks/ganttDiagram-23REXITY-VE5MVBTO.js +292 -0
  225. package/dist/client/assets/chunks/gdresource-5OTP326D.js +1 -0
  226. package/dist/client/assets/chunks/gdscript-VPWHSCLF.js +1 -0
  227. package/dist/client/assets/chunks/gdshader-FYLPXFE5.js +1 -0
  228. package/dist/client/assets/chunks/genie-UYMEEMA2.js +1 -0
  229. package/dist/client/assets/chunks/gherkin-SU7D5DMY.js +1 -0
  230. package/dist/client/assets/chunks/git-commit-5CF5QAG7.js +1 -0
  231. package/dist/client/assets/chunks/git-rebase-X72BAUZI.js +1 -0
  232. package/dist/client/assets/chunks/gitGraph-VSP46ZUC-J6CJ5YZF.js +1 -0
  233. package/dist/client/assets/chunks/gitGraphDiagram-STJD7YCW-7YJGT6ZP.js +106 -0
  234. package/dist/client/assets/chunks/gleam-LR42YRKO.js +1 -0
  235. package/dist/client/assets/chunks/glimmer-js-JPF67FJU.js +1 -0
  236. package/dist/client/assets/chunks/glimmer-ts-BYPAVIZT.js +1 -0
  237. package/dist/client/assets/chunks/glsl-GTGUULBN.js +1 -0
  238. package/dist/client/assets/chunks/gn-NMDQA4K3.js +1 -0
  239. package/dist/client/assets/chunks/gnuplot-UUAMYBCZ.js +1 -0
  240. package/dist/client/assets/chunks/go-4RERSTNP.js +1 -0
  241. package/dist/client/assets/chunks/graphql-5A6RK6YF.js +1 -0
  242. package/dist/client/assets/chunks/groovy-O7BJONCU.js +1 -0
  243. package/dist/client/assets/chunks/hack-7QGTNPDP.js +1 -0
  244. package/dist/client/assets/chunks/haml-ON5GAWN4.js +1 -0
  245. package/dist/client/assets/chunks/handlebars-6UOQSUBP.js +1 -0
  246. package/dist/client/assets/chunks/haskell-OIZXZ26Y.js +1 -0
  247. package/dist/client/assets/chunks/haxe-7FFVS4FO.js +1 -0
  248. package/dist/client/assets/chunks/hcl-XFUFQJHV.js +1 -0
  249. package/dist/client/assets/chunks/hjson-QDBHMTD5.js +1 -0
  250. package/dist/client/assets/chunks/hlsl-4LP25FFN.js +1 -0
  251. package/dist/client/assets/chunks/html-7RNQXAAV.js +1 -0
  252. package/dist/client/assets/chunks/html-derivative-ESOY72Q2.js +1 -0
  253. package/dist/client/assets/chunks/http-SAD4PMBD.js +1 -0
  254. package/dist/client/assets/chunks/hurl-ZSJJXPQH.js +1 -0
  255. package/dist/client/assets/chunks/hxml-HJCC37RK.js +1 -0
  256. package/dist/client/assets/chunks/hy-CLDE3P4K.js +1 -0
  257. package/dist/client/assets/chunks/imba-REB34U5V.js +1 -0
  258. package/dist/client/assets/chunks/info-OHQRW6UA-EQQKXR77.js +1 -0
  259. package/dist/client/assets/chunks/infoDiagram-KBXO4MBG-F6KGZCGS.js +2 -0
  260. package/dist/client/assets/chunks/ini-PDFEMGRA.js +1 -0
  261. package/dist/client/assets/chunks/ishikawaDiagram-M35NCXHK-5D6ZOZ34.js +70 -0
  262. package/dist/client/assets/chunks/java-KB6XENAD.js +1 -0
  263. package/dist/client/assets/chunks/javascript-3JX5T423.js +1 -0
  264. package/dist/client/assets/chunks/jinja-V4UNU6K4.js +1 -0
  265. package/dist/client/assets/chunks/jison-KH5XNLJP.js +1 -0
  266. package/dist/client/assets/chunks/journeyDiagram-OPLOXDXO-ANDOJZKW.js +139 -0
  267. package/dist/client/assets/chunks/json-HPXFRRPY.js +1 -0
  268. package/dist/client/assets/chunks/json5-LJM6TXWM.js +1 -0
  269. package/dist/client/assets/chunks/jsonc-UZWRU3JV.js +1 -0
  270. package/dist/client/assets/chunks/jsonl-RFZD5UN4.js +1 -0
  271. package/dist/client/assets/chunks/jsonnet-GFZABBL6.js +1 -0
  272. package/dist/client/assets/chunks/jssm-2YIGBISJ.js +1 -0
  273. package/dist/client/assets/chunks/jsx-KLV2ZWUT.js +1 -0
  274. package/dist/client/assets/chunks/julia-3TZDIPPO.js +1 -0
  275. package/dist/client/assets/chunks/just-UHCONBQS.js +1 -0
  276. package/dist/client/assets/chunks/kanban-definition-BZKZHSQY-GF5I5NVD.js +89 -0
  277. package/dist/client/assets/chunks/katex-PIN72PQZ.js +257 -0
  278. package/dist/client/assets/chunks/kdl-DARTFOCL.js +1 -0
  279. package/dist/client/assets/chunks/kotlin-7KT5DW6Y.js +1 -0
  280. package/dist/client/assets/chunks/kusto-EKYXZTC5.js +1 -0
  281. package/dist/client/assets/chunks/langs-GO3UQR4H.js +1 -0
  282. package/dist/client/assets/chunks/latex-T57MIHR5.js +1 -0
  283. package/dist/client/assets/chunks/lean-5QVPRMV6.js +1 -0
  284. package/dist/client/assets/chunks/less-K6QEH5TN.js +1 -0
  285. package/dist/client/assets/chunks/liquid-3LCNNEIV.js +1 -0
  286. package/dist/client/assets/chunks/llvm-O32ZIVRF.js +1 -0
  287. package/dist/client/assets/chunks/log-C4YPJ5BB.js +1 -0
  288. package/dist/client/assets/chunks/logo-JPMO43A6.js +1 -0
  289. package/dist/client/assets/chunks/lua-YKVSOG7K.js +1 -0
  290. package/dist/client/assets/chunks/luau-K4EECYSO.js +1 -0
  291. package/dist/client/assets/chunks/make-VHSYMHHW.js +1 -0
  292. package/dist/client/assets/chunks/markdown-GC5J46H4.js +1 -0
  293. package/dist/client/assets/chunks/marko-U45YFADC.js +1 -0
  294. package/dist/client/assets/chunks/matlab-AMOKC4LU.js +1 -0
  295. package/dist/client/assets/chunks/mdc-DIGA2UXP.js +1 -0
  296. package/dist/client/assets/chunks/mdx-BZUGCKQA.js +1 -0
  297. package/dist/client/assets/chunks/mermaid-WHDP6ZPA.js +1 -0
  298. package/dist/client/assets/chunks/mermaid.core-SQMPMUDN.js +10 -0
  299. package/dist/client/assets/chunks/mindmap-definition-I2QAS2VK-4NH5S56C.js +98 -0
  300. package/dist/client/assets/chunks/mipsasm-2S4CUGQV.js +1 -0
  301. package/dist/client/assets/chunks/mojo-ZOL2PNKT.js +1 -0
  302. package/dist/client/assets/chunks/moonbit-U3BDAIFE.js +1 -0
  303. package/dist/client/assets/chunks/move-YSXALBWA.js +1 -0
  304. package/dist/client/assets/chunks/narrat-DHFIAUJH.js +1 -0
  305. package/dist/client/assets/chunks/nextflow-ESAKNTI3.js +1 -0
  306. package/dist/client/assets/chunks/nextflow-groovy-FKDSPJUI.js +1 -0
  307. package/dist/client/assets/chunks/nginx-XYAYERLO.js +1 -0
  308. package/dist/client/assets/chunks/nim-XOWBVFDH.js +1 -0
  309. package/dist/client/assets/chunks/nix-RVSTQSHC.js +1 -0
  310. package/dist/client/assets/chunks/nsis-KMDUKQRL.js +1 -0
  311. package/dist/client/assets/chunks/nushell-SKJHHZ7U.js +1 -0
  312. package/dist/client/assets/chunks/objective-c-3B3KXQ7Q.js +1 -0
  313. package/dist/client/assets/chunks/objective-cpp-6JDULPJS.js +1 -0
  314. package/dist/client/assets/chunks/ocaml-TMRFXBVO.js +1 -0
  315. package/dist/client/assets/chunks/odin-IN3PLCK7.js +1 -0
  316. package/dist/client/assets/chunks/openscad-P52IKPNH.js +1 -0
  317. package/dist/client/assets/chunks/org-N3SJ2PIA.js +1 -0
  318. package/dist/client/assets/chunks/packet-JDAUHWVQ-4SWIKSKP.js +1 -0
  319. package/dist/client/assets/chunks/pascal-T7CUWCQ4.js +1 -0
  320. package/dist/client/assets/chunks/pegDiagram-FD4XPPHP-WDKZSEGN.js +1 -0
  321. package/dist/client/assets/chunks/perl-LCZ4KODH.js +1 -0
  322. package/dist/client/assets/chunks/php-4XHMBVR5.js +1 -0
  323. package/dist/client/assets/chunks/pie-XZMESJXO-PSSWOWGV.js +1 -0
  324. package/dist/client/assets/chunks/pieDiagram-J4AKIIQI-BDW5I5ON.js +39 -0
  325. package/dist/client/assets/chunks/pkl-OACG5B67.js +1 -0
  326. package/dist/client/assets/chunks/plsql-7E5C7CJX.js +1 -0
  327. package/dist/client/assets/chunks/po-ZSREFRRP.js +1 -0
  328. package/dist/client/assets/chunks/polar-4GBINVA7.js +1 -0
  329. package/dist/client/assets/chunks/postcss-B7RPVGFW.js +1 -0
  330. package/dist/client/assets/chunks/powerquery-6UFMTY4G.js +1 -0
  331. package/dist/client/assets/chunks/powershell-3STRPCNT.js +1 -0
  332. package/dist/client/assets/chunks/prisma-4TPSPIZ5.js +1 -0
  333. package/dist/client/assets/chunks/prolog-HEAYPKQW.js +1 -0
  334. package/dist/client/assets/chunks/proto-Y3Y3VKXM.js +1 -0
  335. package/dist/client/assets/chunks/pug-7PBPMG3M.js +1 -0
  336. package/dist/client/assets/chunks/puppet-FR35R4OI.js +1 -0
  337. package/dist/client/assets/chunks/purescript-OUHXQAOW.js +1 -0
  338. package/dist/client/assets/chunks/python-SNDG7FNU.js +1 -0
  339. package/dist/client/assets/chunks/qml-UVIOSWP4.js +1 -0
  340. package/dist/client/assets/chunks/qmldir-6JGUNYL5.js +1 -0
  341. package/dist/client/assets/chunks/qss-ZCC466IZ.js +1 -0
  342. package/dist/client/assets/chunks/quadrantDiagram-XTYBLID2-5VKXWVJ6.js +7 -0
  343. package/dist/client/assets/chunks/r-4XW4O3ZF.js +1 -0
  344. package/dist/client/assets/chunks/racket-YJAYXOOG.js +1 -0
  345. package/dist/client/assets/chunks/radar-ABXABTNO-3AXZCEY2.js +1 -0
  346. package/dist/client/assets/chunks/railroad-I3PHUGI6-2PLXYPOT.js +1 -0
  347. package/dist/client/assets/chunks/railroad-abnf-LNEFI6M7-M4DGICQX.js +1 -0
  348. package/dist/client/assets/chunks/railroad-ebnf-DWYD2UWJ-UEIHQMSZ.js +1 -0
  349. package/dist/client/assets/chunks/railroad-peg-JR7BVNR7-I7VLIBXM.js +1 -0
  350. package/dist/client/assets/chunks/railroadDiagram-MRQ6NCDL-Y6IYWEFL.js +1 -0
  351. package/dist/client/assets/chunks/raku-63NEL5JK.js +1 -0
  352. package/dist/client/assets/chunks/razor-J3CJP523.js +1 -0
  353. package/dist/client/assets/chunks/rbs-6GQLT7NW.js +1 -0
  354. package/dist/client/assets/chunks/reg-6Q3OEC2C.js +1 -0
  355. package/dist/client/assets/chunks/regexp-LPIMILT3.js +1 -0
  356. package/dist/client/assets/chunks/rel-TOQGUTHB.js +1 -0
  357. package/dist/client/assets/chunks/requirementDiagram-Y7LWUY3S-CIWXVVWJ.js +84 -0
  358. package/dist/client/assets/chunks/riscv-UELGBOXE.js +1 -0
  359. package/dist/client/assets/chunks/ron-FW7LCJJH.js +1 -0
  360. package/dist/client/assets/chunks/rosmsg-O63VHE3L.js +1 -0
  361. package/dist/client/assets/chunks/rst-3WJXGLA7.js +1 -0
  362. package/dist/client/assets/chunks/ruby-7S7L6JTH.js +1 -0
  363. package/dist/client/assets/chunks/rust-LIK4HRRI.js +1 -0
  364. package/dist/client/assets/chunks/sankeyDiagram-WGJFYUXA-OGNQPX5V.js +40 -0
  365. package/dist/client/assets/chunks/sas-FHDPZ2JH.js +1 -0
  366. package/dist/client/assets/chunks/sass-UI4HW2FN.js +1 -0
  367. package/dist/client/assets/chunks/scala-KN7RQSUJ.js +1 -0
  368. package/dist/client/assets/chunks/scheme-5R527YZ5.js +1 -0
  369. package/dist/client/assets/chunks/scss-KZ6DRE4A.js +1 -0
  370. package/dist/client/assets/chunks/sdbl-FHOCL5SL.js +1 -0
  371. package/dist/client/assets/chunks/sequenceDiagram-5NDRBG5M-QX2V24ZU.js +169 -0
  372. package/dist/client/assets/chunks/shaderlab-2TLHUS2H.js +1 -0
  373. package/dist/client/assets/chunks/shellscript-PIB6ZBDM.js +1 -0
  374. package/dist/client/assets/chunks/shellsession-5KL7NFNN.js +1 -0
  375. package/dist/client/assets/chunks/sizeCapture-INFHLROL-LCS2PIHM.js +1 -0
  376. package/dist/client/assets/chunks/smalltalk-JFLFU247.js +1 -0
  377. package/dist/client/assets/chunks/smithy-HONEXZAM.js +1 -0
  378. package/dist/client/assets/chunks/solidity-SJ3INJFZ.js +1 -0
  379. package/dist/client/assets/chunks/soy-ND4SWTM2.js +1 -0
  380. package/dist/client/assets/chunks/sparql-YB2JQBZD.js +1 -0
  381. package/dist/client/assets/chunks/splunk-UXIDDAWL.js +1 -0
  382. package/dist/client/assets/chunks/sql-K6OMG7SQ.js +1 -0
  383. package/dist/client/assets/chunks/ssh-config-I7KJY3KQ.js +1 -0
  384. package/dist/client/assets/chunks/stata-DNZ3DTFJ.js +1 -0
  385. package/dist/client/assets/chunks/stateDiagram-v2-FJ4FJNEA-LVAUWF3A.js +291 -0
  386. package/dist/client/assets/chunks/stylus-GWPR6IQY.js +1 -0
  387. package/dist/client/assets/chunks/surrealql-KQNHBWLC.js +1 -0
  388. package/dist/client/assets/chunks/svelte-YQKF25S4.js +1 -0
  389. package/dist/client/assets/chunks/swift-ZCIZUJXA.js +1 -0
  390. package/dist/client/assets/chunks/swimlanes-UMQ2AFYF-B3RQOARQ.js +1 -0
  391. package/dist/client/assets/chunks/swimlanesDiagram-OMPLPG4O-JOE33EOV.js +8 -0
  392. package/dist/client/assets/chunks/system-verilog-Y7E6FIO3.js +1 -0
  393. package/dist/client/assets/chunks/systemd-WHC7NBZP.js +1 -0
  394. package/dist/client/assets/chunks/talonscript-WC7SODAH.js +1 -0
  395. package/dist/client/assets/chunks/tasl-QHY2GTCB.js +1 -0
  396. package/dist/client/assets/chunks/tcl-VAMIL5PJ.js +1 -0
  397. package/dist/client/assets/chunks/temml-ISNSX3VV.js +96 -0
  398. package/dist/client/assets/chunks/templ-B3BHKWV4.js +1 -0
  399. package/dist/client/assets/chunks/terraform-Q4UEK6FK.js +1 -0
  400. package/dist/client/assets/chunks/tex-63OWCYAB.js +1 -0
  401. package/dist/client/assets/chunks/timeline-definition-SEUHKTQE-FDFTVAJG.js +120 -0
  402. package/dist/client/assets/chunks/toml-7Z4IPGES.js +1 -0
  403. package/dist/client/assets/chunks/treeView-D4JQ5SDB-ABSGRAGI.js +1 -0
  404. package/dist/client/assets/chunks/treemap-SAJKECNS-MYX2CBJN.js +1 -0
  405. package/dist/client/assets/chunks/ts-tags-DT62HE52.js +1 -0
  406. package/dist/client/assets/chunks/tsv-RTXHWADP.js +1 -0
  407. package/dist/client/assets/chunks/tsx-UANUBOC7.js +1 -0
  408. package/dist/client/assets/chunks/turtle-QVOUNUUL.js +1 -0
  409. package/dist/client/assets/chunks/twig-ZPC4BPDA.js +1 -0
  410. package/dist/client/assets/chunks/typescript-WGWKIMMW.js +1 -0
  411. package/dist/client/assets/chunks/typespec-TYCVR32J.js +1 -0
  412. package/dist/client/assets/chunks/typst-PIBFYUO6.js +1 -0
  413. package/dist/client/assets/chunks/usecaseDiagram-AFA6YXN4-KW7ADINR.js +370 -0
  414. package/dist/client/assets/chunks/v-3ERNWBSP.js +1 -0
  415. package/dist/client/assets/chunks/vala-UCBCT2GS.js +1 -0
  416. package/dist/client/assets/chunks/vb-DGI3VTPA.js +1 -0
  417. package/dist/client/assets/chunks/vennDiagram-NNMJR3RB-RDGLGOGM.js +34 -0
  418. package/dist/client/assets/chunks/verilog-G72NZROS.js +1 -0
  419. package/dist/client/assets/chunks/vhdl-PYGA77XE.js +1 -0
  420. package/dist/client/assets/chunks/viml-OOC5B5UU.js +1 -0
  421. package/dist/client/assets/chunks/vue-GTNHIOPG.js +1 -0
  422. package/dist/client/assets/chunks/vue-html-DKAMJV55.js +1 -0
  423. package/dist/client/assets/chunks/vue-vine-WTM5HREV.js +1 -0
  424. package/dist/client/assets/chunks/vyper-RHYEHOJM.js +1 -0
  425. package/dist/client/assets/chunks/wardley-7MLQ67FV-QJL2HSBT.js +1 -0
  426. package/dist/client/assets/chunks/wardleyDiagram-S7YFUSEH-A4XX3UJR.js +78 -0
  427. package/dist/client/assets/chunks/wasm-ZMM2Z5XV.js +1 -0
  428. package/dist/client/assets/chunks/wenyan-HF5UTKSJ.js +1 -0
  429. package/dist/client/assets/chunks/wgsl-O7D7OPO7.js +1 -0
  430. package/dist/client/assets/chunks/wikitext-T7BSWSKQ.js +1 -0
  431. package/dist/client/assets/chunks/wit-TKCHPPT6.js +1 -0
  432. package/dist/client/assets/chunks/wolfram-7MN66A7N.js +1 -0
  433. package/dist/client/assets/chunks/xml-NLTLAWOD.js +1 -0
  434. package/dist/client/assets/chunks/xsl-NZ4ECK3P.js +1 -0
  435. package/dist/client/assets/chunks/xychartDiagram-GGNKY7IX-OXJILWHR.js +7 -0
  436. package/dist/client/assets/chunks/yaml-HRJLEV3V.js +1 -0
  437. package/dist/client/assets/chunks/zenscript-4LLRSLPI.js +1 -0
  438. package/dist/client/assets/chunks/zig-Y7MUQFUO.js +1 -0
  439. package/dist/client/assets/main.js +186 -0
  440. package/dist/client/index.html +48 -0
  441. package/dist/config.js +322 -0
  442. package/dist/files.js +178 -0
  443. package/dist/git.js +365 -0
  444. package/dist/glob.js +89 -0
  445. package/dist/review.js +290 -0
  446. package/dist/search.js +136 -0
  447. package/dist/server.js +482 -0
  448. package/dist/watch.js +69 -0
  449. package/dist/zip.js +100 -0
  450. package/package.json +61 -4
package/dist/git.js ADDED
@@ -0,0 +1,365 @@
1
+ // Git, when the folder is in a repository: each file's state, the branch, diffs, a file's history, and old versions.
2
+ import { execFile } from 'node:child_process';
3
+ import path from 'node:path';
4
+ import fs from 'node:fs';
5
+ export class Git {
6
+ top;
7
+ prefix;
8
+ root;
9
+ /** the repository's top folder, and the served root's path inside it ('' at the top) */
10
+ constructor(top, prefix, root) {
11
+ this.top = top;
12
+ this.prefix = prefix;
13
+ this.root = root;
14
+ }
15
+ static async open(root) {
16
+ try {
17
+ const top = (await run(root, ['rev-parse', '--show-toplevel'])).trim();
18
+ if (!top)
19
+ return undefined;
20
+ const realTop = fs.realpathSync(top);
21
+ const realRoot = fs.realpathSync(root);
22
+ const prefix = path.relative(realTop, realRoot).split(path.sep).join('/');
23
+ return new Git(realTop, prefix, root);
24
+ }
25
+ catch {
26
+ return undefined;
27
+ }
28
+ }
29
+ /** a repo-relative path → root-relative, or undefined when it is outside the served folder */
30
+ fromRepo(p) {
31
+ if (!this.prefix)
32
+ return p;
33
+ return p === this.prefix ? '' : p.startsWith(this.prefix + '/') ? p.slice(this.prefix.length + 1) : undefined;
34
+ }
35
+ git(args) {
36
+ return run(this.top, ['-c', 'core.quotepath=off', ...args]);
37
+ }
38
+ async hasHead() {
39
+ try {
40
+ await this.git(['rev-parse', '--verify', '-q', 'HEAD']);
41
+ return true;
42
+ }
43
+ catch {
44
+ return false;
45
+ }
46
+ }
47
+ async status() {
48
+ const scope = this.prefix ? ['--', this.prefix] : [];
49
+ const [raw, ignoredRaw, head] = await Promise.all([
50
+ this.git(['status', '--porcelain=v1', '-b', '-z', '--untracked-files=all', ...scope]),
51
+ this.git(['ls-files', '-o', '-i', '--exclude-standard', '--directory', '-z', ...scope]).catch(() => ''),
52
+ this.git(['rev-parse', '--short', 'HEAD']).catch(() => ''),
53
+ ]);
54
+ const recs = raw.split('\0');
55
+ const status = { repo: true, branch: '', ahead: 0, behind: 0, changes: [], ignored: [] };
56
+ if (head.trim())
57
+ status.head = head.trim();
58
+ for (let i = 0; i < recs.length; i++) {
59
+ const r = recs[i];
60
+ if (!r)
61
+ continue;
62
+ if (r.startsWith('## ')) {
63
+ // "## main...origin/main [ahead 1, behind 2]", "## No commits yet on main", "## HEAD (no branch)"
64
+ const body = r.slice(3).replace(/^No commits yet on /, '');
65
+ const at = body.indexOf(' [');
66
+ const names = at < 0 ? body : body.slice(0, at);
67
+ const track = at < 0 ? '' : body.slice(at);
68
+ const [branch = '', upstream] = names.split('...');
69
+ status.branch = branch;
70
+ if (upstream)
71
+ status.upstream = upstream;
72
+ const a = /ahead (\d+)/.exec(track), b = /behind (\d+)/.exec(track);
73
+ status.ahead = a ? Number(a[1]) : 0;
74
+ status.behind = b ? Number(b[1]) : 0;
75
+ continue;
76
+ }
77
+ const x = r[0] ?? ' ', y = r[1] ?? ' ';
78
+ const file = r.slice(3);
79
+ let from;
80
+ if (x === 'R' || x === 'C')
81
+ from = recs[++i];
82
+ const rel = this.fromRepo(file);
83
+ if (rel === undefined)
84
+ continue;
85
+ const change = { path: rel, state: stateOf(x, y), staged: x !== ' ' && x !== '?', unstaged: y !== ' ' };
86
+ if (from)
87
+ change.from = this.fromRepo(from) ?? from;
88
+ status.changes.push(change);
89
+ }
90
+ for (const p of ignoredRaw.split('\0')) {
91
+ const rel = p && this.fromRepo(p.replace(/\/$/, ''));
92
+ if (rel)
93
+ status.ignored.push(p.endsWith('/') ? rel + '/' : rel);
94
+ }
95
+ await this.counts(status.changes);
96
+ return status;
97
+ }
98
+ /** lines added and removed per changed file, against HEAD (whole file for new ones) */
99
+ async counts(changes) {
100
+ if (!changes.length)
101
+ return;
102
+ const byPath = new Map(changes.map((c) => [c.path, c]));
103
+ const scope = this.prefix ? ['--', this.prefix] : [];
104
+ const base = (await this.hasHead()) ? ['diff', 'HEAD'] : ['diff', '--cached'];
105
+ const out = await this.git([...base, '--numstat', '-z', ...scope]).catch(() => '');
106
+ const recs = out.split('\0');
107
+ for (let i = 0; i < recs.length; i++) {
108
+ const m = /^(\d+|-)\t(\d+|-)\t(.*)$/.exec(recs[i] ?? '');
109
+ if (!m)
110
+ continue;
111
+ let file = m[3] ?? '';
112
+ if (!file) {
113
+ i++; // a rename: "old\0new"
114
+ file = recs[++i] ?? '';
115
+ }
116
+ const c = byPath.get(this.fromRepo(file) ?? '');
117
+ if (c && m[1] !== '-') {
118
+ c.add = Number(m[1]);
119
+ c.del = Number(m[2]);
120
+ }
121
+ }
122
+ for (const c of changes) {
123
+ if (c.state !== 'new' || c.add !== undefined)
124
+ continue;
125
+ try {
126
+ const abs = path.join(this.root, c.path);
127
+ if (fs.statSync(abs).size > 2_000_000)
128
+ continue;
129
+ const t = fs.readFileSync(abs, 'utf8');
130
+ if (!t.includes('\0'))
131
+ c.add = t ? t.split('\n').length - (t.endsWith('\n') ? 1 : 0) : 0;
132
+ }
133
+ catch {
134
+ // gone again
135
+ }
136
+ }
137
+ }
138
+ repoPath(rel) {
139
+ return this.prefix ? (rel ? this.prefix + '/' + rel : this.prefix) : rel;
140
+ }
141
+ /** a unified diff of one file against HEAD (staged and unstaged together); a new file diffs against nothing */
142
+ async diff(rel) {
143
+ const p = this.repoPath(rel);
144
+ const tracked = await this.git(['ls-files', '--error-unmatch', '--', p]).then(() => true, () => false);
145
+ if (!tracked) {
146
+ // untracked: --no-index exits 1 when the files differ, which is the point
147
+ return run(this.top, ['diff', '--no-index', '--no-color', '--', nullDevice(), p], [0, 1]);
148
+ }
149
+ const base = (await this.hasHead()) ? ['diff', 'HEAD'] : ['diff', '--cached'];
150
+ return this.git([...base, '--no-color', '-M', '--', p]);
151
+ }
152
+ /** the file as of a commit (HEAD by default) */
153
+ show(rel, rev = 'HEAD') {
154
+ return this.git(['show', `${rev}:${this.repoPath(rel)}`]);
155
+ }
156
+ /** the file's bytes as of a commit (for binary files: images to compare) */
157
+ showRaw(rel, rev = 'HEAD') {
158
+ return new Promise((resolve, reject) => {
159
+ execFile('git', ['show', `${rev}:${this.repoPath(rel)}`], { cwd: this.top, encoding: 'buffer', maxBuffer: 256 * 1024 * 1024, windowsHide: true }, (err, stdout) => err ? reject(err) : resolve(stdout));
160
+ });
161
+ }
162
+ async log(rel, limit = 30, skip = 0) {
163
+ const out = await this.git(['log', '--follow', `-n${limit}`, `--skip=${skip}`, '--format=%h%x1f%an%x1f%at%x1f%s%x1e', '--', this.repoPath(rel)]).catch(() => '');
164
+ return out
165
+ .split('\x1e')
166
+ .map((r) => r.trim())
167
+ .filter(Boolean)
168
+ .map((r) => {
169
+ const [hash = '', author = '', time = '0', subject = ''] = r.split('\x1f');
170
+ return { hash, author, time: Number(time) * 1000, subject };
171
+ });
172
+ }
173
+ /** the diff a commit made to one file */
174
+ commitDiff(rel, hash) {
175
+ return this.git(['show', '--no-color', '--format=%H%n%an <%ae>%n%ad%n%n%B', '-M', hash, '--', this.repoPath(rel)]);
176
+ }
177
+ /**
178
+ * The repository's commits (those touching the served folder), newest first, each marked pushed or local, plus
179
+ * the upstream's commits not pulled yet (on the first page).
180
+ */
181
+ async history(skip = 0, limit = 50, q = '') {
182
+ const scope = this.prefix ? ['--', this.prefix] : [];
183
+ const none = () => '';
184
+ // a search: words in the message (any case), or the start of a hash
185
+ const find = q ? ['-i', '-F', `--grep=${q}`] : [];
186
+ const first = !skip && !q;
187
+ // every question at once (each git call costs a process start, slow on Windows); the ones that can't apply
188
+ // (no upstream, no remote, no commits yet) just fail to ''
189
+ const [remoteList, up, out, hashOut, inRaw, inCount, localRaw, localScoped] = await Promise.all([
190
+ this.git(['remote']).catch(none),
191
+ this.git(['rev-parse', '--abbrev-ref', '--symbolic-full-name', '@{u}']).catch(none),
192
+ this.git(['log', `-n${limit + 1}`, `--skip=${skip}`, `--format=${LOG_FORMAT}`, ...find, 'HEAD', ...scope]).catch(none),
193
+ /^[0-9a-f]{4,40}$/i.test(q) && !skip ? this.git(['log', '-n1', `--format=${LOG_FORMAT}`, q, '--']).catch(none) : '',
194
+ first ? this.git(['log', '-n50', `--format=${LOG_FORMAT}`, 'HEAD..@{u}', ...scope]).catch(none) : '',
195
+ first ? this.git(['rev-list', '--count', 'HEAD..@{u}', ...scope]).catch(none) : '',
196
+ // the commits only here (up to a limit, so a never-pushed giant history stays quick)
197
+ this.git(['rev-list', `--max-count=${LOCAL_CAP + 1}`, 'HEAD', '--not', '--remotes']).catch(none),
198
+ first && this.prefix ? this.git(['rev-list', '--count', `--max-count=${LOCAL_CAP + 1}`, 'HEAD', '--not', '--remotes', ...scope]).catch(none) : '',
199
+ ]);
200
+ const remotes = remoteList.trim() !== '';
201
+ const upstream = up.trim() || undefined;
202
+ const h = { commits: [], incoming: [], incomingTotal: 0, more: false, remotes, ...(upstream ? { upstream } : {}) };
203
+ let all = parseLog(out);
204
+ h.more = all.length > limit;
205
+ all = all.slice(0, limit);
206
+ const hit = parseLog(hashOut)[0];
207
+ if (hit && !all.some((c) => c.full === hit.full))
208
+ all.unshift(hit);
209
+ h.commits = all.map((c) => ({ ...c, state: remotes ? 'pushed' : 'unknown' }));
210
+ const localList = localRaw.split('\n').filter(Boolean);
211
+ if (remotes && all.length) {
212
+ let local = new Set(localList);
213
+ if (localList.length > LOCAL_CAP) {
214
+ // more unpushed commits than the list holds: ask again for just this page's stretch of time (the unpushed
215
+ // ones no older than its oldest commit, a day's slack for clock skew)
216
+ const oldest = Math.floor(Math.min(...all.map((c) => c.time)) / 1000 - 86400);
217
+ local = new Set((await this.git(['rev-list', `--since=${oldest}`, 'HEAD', '--not', '--remotes']).catch(none)).split('\n').filter(Boolean));
218
+ }
219
+ for (const c of h.commits)
220
+ if (local.has(c.full))
221
+ c.state = 'local';
222
+ }
223
+ if (upstream) {
224
+ h.incoming = parseLog(inRaw).map((c) => ({ ...c, state: 'incoming' }));
225
+ h.incomingTotal = Number(inCount.trim()) || h.incoming.length;
226
+ }
227
+ if (remotes && first) {
228
+ const n = this.prefix ? Number(localScoped.trim()) || 0 : localList.length;
229
+ h.localTotal = n > LOCAL_CAP ? `${LOCAL_CAP}+` : String(n);
230
+ }
231
+ return h;
232
+ }
233
+ /** what a commit was, and which files (in the served folder) it changed, against its first parent */
234
+ async commitInfo(rev) {
235
+ const raw = await this.git(['show', '-s', '--format=%H%x1f%h%x1f%an%x1f%ae%x1f%at%x1f%P%x1f%s%x1f%b', rev]);
236
+ const [full = '', hash = '', author = '', email = '', time = '0', parents = '', subject = '', ...rest] = raw.replace(/\n$/, '').split('\x1f');
237
+ const base = await this.parentOf(full);
238
+ const scope = this.prefix ? ['--', this.prefix] : [];
239
+ const [names, nums] = await Promise.all([
240
+ this.git(['diff', '--name-status', '-z', '-M', base, full, ...scope]),
241
+ this.git(['diff', '--numstat', '-z', '-M', base, full, ...scope]),
242
+ ]);
243
+ const files = [];
244
+ const recs = names.split('\0');
245
+ for (let i = 0; i < recs.length; i++) {
246
+ const s = recs[i];
247
+ if (!s)
248
+ continue;
249
+ let from;
250
+ let file = recs[++i] ?? '';
251
+ if (s[0] === 'R' || s[0] === 'C') {
252
+ from = file;
253
+ file = recs[++i] ?? '';
254
+ }
255
+ const rel = this.fromRepo(file);
256
+ if (rel === undefined)
257
+ continue;
258
+ const state = s[0] === 'A' || s[0] === 'C' ? 'added' : s[0] === 'D' ? 'deleted' : s[0] === 'R' ? 'renamed' : 'modified';
259
+ const f = { path: rel, state };
260
+ if (from)
261
+ f.from = this.fromRepo(from) ?? from;
262
+ files.push(f);
263
+ }
264
+ const byPath = new Map(files.map((f) => [f.path, f]));
265
+ const nr = nums.split('\0');
266
+ for (let i = 0; i < nr.length; i++) {
267
+ const m = /^(\d+|-)\t(\d+|-)\t(.*)$/.exec(nr[i] ?? '');
268
+ if (!m)
269
+ continue;
270
+ let file = m[3] ?? '';
271
+ if (!file) {
272
+ i++;
273
+ file = nr[++i] ?? '';
274
+ }
275
+ const f = byPath.get(this.fromRepo(file) ?? '');
276
+ if (f && m[1] !== '-') {
277
+ f.add = Number(m[1]);
278
+ f.del = Number(m[2]);
279
+ }
280
+ }
281
+ return {
282
+ commit: { full, hash, author, email, time: Number(time) * 1000, parents: parents.split(' ').filter(Boolean), subject, body: rest.join('\x1f').trim() },
283
+ files,
284
+ };
285
+ }
286
+ /** one file's diff in a commit, against the commit's first parent (a rename needs its old path too) */
287
+ async commitFileDiff(rev, rel, fromRel) {
288
+ const full = (await this.git(['rev-parse', '--verify', rev + '^{commit}'])).trim();
289
+ const base = await this.parentOf(full);
290
+ const paths = [this.repoPath(rel), ...(fromRel ? [this.repoPath(fromRel)] : [])];
291
+ return this.git(['diff', '--no-color', '-M', base, full, '--', ...paths]);
292
+ }
293
+ async parentOf(full) {
294
+ return (await this.git(['rev-parse', '--verify', '-q', full + '^1']).catch(() => '')).trim() || EMPTY_TREE;
295
+ }
296
+ async userName() {
297
+ return (await this.git(['config', 'user.name']).catch(() => '')).trim();
298
+ }
299
+ /**
300
+ * The files (root-relative) that may match a search: git grep reads the tree far faster than one file at a time.
301
+ * A regular expression goes to git as PCRE (close to JavaScript's); undefined when git can't run it, and the caller
302
+ * reads every file instead.
303
+ */
304
+ async grepFiles(q, o) {
305
+ const args = ['-c', 'core.quotepath=off', 'grep', '-l', '-I', '--null', '--untracked', o.regex ? '-P' : '-F'];
306
+ if (!o.caseSensitive)
307
+ args.push('-i');
308
+ if (o.word)
309
+ args.push('-w');
310
+ args.push('-e', q);
311
+ try {
312
+ const out = await run(this.root, args, [0, 1]);
313
+ return new Set(out.split('').filter(Boolean));
314
+ }
315
+ catch {
316
+ return undefined;
317
+ }
318
+ }
319
+ /** files tracked or untracked-but-not-ignored, root-relative */
320
+ async files() {
321
+ const out = await run(this.root, ['-c', 'core.quotepath=off', 'ls-files', '-co', '--exclude-standard', '-z']);
322
+ return out.split('\0').filter(Boolean);
323
+ }
324
+ }
325
+ function stateOf(x, y) {
326
+ if (x === '?' && y === '?')
327
+ return 'new';
328
+ if (x === '!')
329
+ return 'ignored';
330
+ if (x === 'U' || y === 'U' || (x === 'A' && y === 'A') || (x === 'D' && y === 'D'))
331
+ return 'conflict';
332
+ if (x === 'R' || x === 'C')
333
+ return 'renamed';
334
+ if (x === 'D' || y === 'D')
335
+ return 'deleted';
336
+ if (x === 'A')
337
+ return 'added';
338
+ return 'modified';
339
+ }
340
+ const LOCAL_CAP = 1000;
341
+ const LOG_FORMAT = '%H%x1f%h%x1f%an%x1f%at%x1f%P%x1f%s%x1e';
342
+ /** git's empty tree: what a first commit is compared with */
343
+ const EMPTY_TREE = '4b825dc642cb6eb9a060e54bf8d69288fbee4904';
344
+ function parseLog(out) {
345
+ return out
346
+ .split('\x1e')
347
+ .map((r) => r.trim())
348
+ .filter(Boolean)
349
+ .map((r) => {
350
+ const [full = '', hash = '', author = '', time = '0', parents = '', subject = ''] = r.split('\x1f');
351
+ return { full, hash, author, time: Number(time) * 1000, parents: parents.split(' ').filter(Boolean), subject };
352
+ });
353
+ }
354
+ const nullDevice = () => (process.platform === 'win32' ? 'NUL' : '/dev/null');
355
+ function run(cwd, args, ok = [0]) {
356
+ return new Promise((resolve, reject) => {
357
+ execFile('git', args, { cwd, maxBuffer: 64 * 1024 * 1024, windowsHide: true }, (err, stdout, stderr) => {
358
+ const code = err && typeof err.code === 'number' ? Number(err.code) : 0;
359
+ if (err && !ok.includes(code))
360
+ reject(new Error(stderr || err.message));
361
+ else
362
+ resolve(stdout);
363
+ });
364
+ });
365
+ }
package/dist/glob.js ADDED
@@ -0,0 +1,89 @@
1
+ // Glob patterns in the .gitignore style, used for excludes (--exclude, FOLDERVIEW_EXCLUDE, .folderviewignore, config)
2
+ // and for search's "files to include".
3
+ //
4
+ // *.log a name anywhere
5
+ // dist/ a folder anywhere (and everything in it)
6
+ // /build only at the top
7
+ // docs/**/*.md a path pattern (anchored at the top)
8
+ // !keep.log an exception to an earlier pattern
9
+ export function toRegex(glob) {
10
+ let g = glob;
11
+ const anchored = g.startsWith('/') || g.replace(/\/$/, '').includes('/');
12
+ g = g.replace(/^\//, '').replace(/\/$/, '');
13
+ let src = '';
14
+ for (let i = 0; i < g.length; i++) {
15
+ const c = g[i] ?? '';
16
+ if (c === '*' && g[i + 1] === '*') {
17
+ i++;
18
+ if (g[i + 1] === '/') {
19
+ i++;
20
+ src += '(?:.*/)?';
21
+ }
22
+ else
23
+ src += '.*';
24
+ }
25
+ else if (c === '*')
26
+ src += '[^/]*';
27
+ else if (c === '?')
28
+ src += '[^/]';
29
+ else if (c === '[') {
30
+ const end = g.indexOf(']', i);
31
+ if (end < 0)
32
+ src += '\\[';
33
+ else {
34
+ src += '[' + g.slice(i + 1, end).replace(/^!/, '^').replace(/\\/g, '\\\\') + ']';
35
+ i = end;
36
+ }
37
+ }
38
+ else
39
+ src += c.replace(/[.+^${}()|\\]/g, '\\$&');
40
+ }
41
+ return new RegExp((anchored ? '^' : '(?:^|/)') + src + '$', process.platform === 'win32' || process.platform === 'darwin' ? 'i' : '');
42
+ }
43
+ export function parseRules(lines) {
44
+ return lines
45
+ .map((l) => l.trim())
46
+ .filter((l) => l && !l.startsWith('#'))
47
+ .map((l) => {
48
+ const negate = l.startsWith('!');
49
+ const body = negate ? l.slice(1) : l;
50
+ return { re: toRegex(body), negate, dirOnly: body.endsWith('/') };
51
+ });
52
+ }
53
+ /** A test for root-relative paths: true when the path, or a folder above it, is excluded. */
54
+ export function excluder(rules) {
55
+ if (!rules.length)
56
+ return () => false;
57
+ const one = (p, isDir) => {
58
+ let out = false;
59
+ for (const r of rules)
60
+ if ((!r.dirOnly || isDir) && r.re.test(p))
61
+ out = !r.negate;
62
+ return out;
63
+ };
64
+ const cache = new Map();
65
+ return (rel, isDir = false) => {
66
+ const key = rel + (isDir ? '/' : '');
67
+ const hit = cache.get(key);
68
+ if (hit !== undefined)
69
+ return hit;
70
+ const parts = rel.split('/').filter(Boolean);
71
+ let out = false;
72
+ for (let i = 1; i <= parts.length && !out; i++)
73
+ out = one(parts.slice(0, i).join('/'), i < parts.length || isDir);
74
+ if (cache.size > 50_000)
75
+ cache.clear();
76
+ cache.set(key, out);
77
+ return out;
78
+ };
79
+ }
80
+ /** Search's include box: "*.ts, src/**, !*.test.ts" (comma-separated; ! excludes). */
81
+ export function pathFilter(spec) {
82
+ const parts = spec
83
+ .split(',')
84
+ .map((s) => s.trim())
85
+ .filter(Boolean);
86
+ const inc = parts.filter((p) => !p.startsWith('!')).map((p) => excluder(parseRules([p])));
87
+ const exc = excluder(parseRules(parts.filter((p) => p.startsWith('!')).map((p) => p.slice(1))));
88
+ return (p) => (!inc.length || inc.some((t) => t(p))) && !exc(p);
89
+ }