cognova 0.2.2 → 0.2.3

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 (508) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/-AsXrBBy.js +1 -0
  3. package/.output/public/_nuxt/2W1RPpXM.js +71 -0
  4. package/.output/public/_nuxt/{C4pxqdgg.js → 5UFq_rDn.js} +1 -1
  5. package/.output/public/_nuxt/5Zh-9l8_.js +1 -0
  6. package/.output/public/_nuxt/{DK9jxJ0g.js → 90UksHlj.js} +1 -1
  7. package/.output/public/_nuxt/{9IQmsEjr.js → 9QKmiSP_.js} +1 -1
  8. package/.output/public/_nuxt/{BOj6t-oo.js → ARbTpeGy.js} +1 -1
  9. package/.output/public/_nuxt/{DyRelyfs.js → ApfLnl06.js} +1 -1
  10. package/.output/public/_nuxt/{DznawRFW.js → B-2BuR5g.js} +1 -1
  11. package/.output/public/_nuxt/B4u7Mczo.js +1 -0
  12. package/.output/public/_nuxt/{DAQhmSv4.js → B5dI_yLq.js} +1 -1
  13. package/.output/public/_nuxt/{Bm9LyG4F.js → B6fnZcA6.js} +1 -1
  14. package/.output/public/_nuxt/{9QnH0xQM.js → B7uMSBlN.js} +1 -1
  15. package/.output/public/_nuxt/BBiRyPlN.js +1 -0
  16. package/.output/public/_nuxt/{iBGCpHdw.js → BF7413u4.js} +2 -2
  17. package/.output/public/_nuxt/{4MiwzAAt.js → BGtUoCgi.js} +2 -2
  18. package/.output/public/_nuxt/{CxuZBC8n.js → BHe4VLtR.js} +1 -1
  19. package/.output/public/_nuxt/{D3RiUGdz.js → BIMBp1Tj.js} +1 -1
  20. package/.output/public/_nuxt/{g20UHUCv.js → BIvPdoE3.js} +1 -1
  21. package/.output/public/_nuxt/BKaRtCjP.js +1 -0
  22. package/.output/public/_nuxt/BLmc9T7l.js +1 -0
  23. package/.output/public/_nuxt/BMdnU6BF.js +1 -0
  24. package/.output/public/_nuxt/{CKkC3Ptm.js → BOgdaA_8.js} +1 -1
  25. package/.output/public/_nuxt/{BffWCM73.js → BQZfTrUg.js} +1 -1
  26. package/.output/public/_nuxt/BQnublTW.js +1 -0
  27. package/.output/public/_nuxt/BSsvedap.js +1 -0
  28. package/.output/public/_nuxt/{Ci7UEZQh.js → BVypxKRT.js} +1 -1
  29. package/.output/public/_nuxt/{CYP_MLH8.js → BWqJFnZy.js} +1 -1
  30. package/.output/public/_nuxt/BXxYdXMr.js +1 -0
  31. package/.output/public/_nuxt/{D_3Rq1BS.js → B_17gAr_.js} +1 -1
  32. package/.output/public/_nuxt/B_qzFVK_.js +1 -0
  33. package/.output/public/_nuxt/{BqKFIuRj.js → BbRPwpIX.js} +1 -1
  34. package/.output/public/_nuxt/BhrzKbv9.js +1 -0
  35. package/.output/public/_nuxt/{Cqy_L_ip.js → Bl6LNGlA.js} +1 -1
  36. package/.output/public/_nuxt/{Fukkqjkf.js → BlPToGni.js} +1 -1
  37. package/.output/public/_nuxt/{DHKLCQRG.js → BlwHr46F.js} +1 -1
  38. package/.output/public/_nuxt/{C6aqGHu1.js → BnmwiZbF.js} +1 -1
  39. package/.output/public/_nuxt/BqtxLJaf.js +1 -0
  40. package/.output/public/_nuxt/{eko-0FUm.js → BrEXdify.js} +1 -1
  41. package/.output/public/_nuxt/{D3e44mCL.js → BtNnS4m3.js} +1 -1
  42. package/.output/public/_nuxt/{BCtfQCzC.js → BtVIBBUN.js} +1 -1
  43. package/.output/public/_nuxt/Bw5h4Jaf.js +1 -0
  44. package/.output/public/_nuxt/{FvlxxmNk.js → Bwcpy7gC.js} +2 -2
  45. package/.output/public/_nuxt/{Db2v8O7O.js → C0TUK31m.js} +1 -1
  46. package/.output/public/_nuxt/C1T4GK6c.js +1 -0
  47. package/.output/public/_nuxt/C2ANDZen.js +1 -0
  48. package/.output/public/_nuxt/{CqU2XbzO.js → C2RZSTuy.js} +1 -1
  49. package/.output/public/_nuxt/C3dYlP5x.js +1 -0
  50. package/.output/public/_nuxt/{m5kGCDpI.js → C3sh_tLi.js} +3 -3
  51. package/.output/public/_nuxt/{BjjCvHLT.js → C4zyxZG7.js} +1 -1
  52. package/.output/public/_nuxt/{C3FxIITy.js → C5I-XBZT.js} +1 -1
  53. package/.output/public/_nuxt/{yuf23kh9.js → CC4Goztu.js} +1 -1
  54. package/.output/public/_nuxt/CC77iplr.js +1 -0
  55. package/.output/public/_nuxt/{xuzLdW-o.js → CFyD2NHP.js} +1 -1
  56. package/.output/public/_nuxt/{CsJ9KhQ4.js → CGQDTeaO.js} +1 -1
  57. package/.output/public/_nuxt/{DnjGH3SQ.js → CHpwuMSk.js} +1 -1
  58. package/.output/public/_nuxt/CLzcRUcs.js +1 -0
  59. package/.output/public/_nuxt/CM2phu_3.js +1 -0
  60. package/.output/public/_nuxt/{Cr8ixbr1.js → CQpYRq61.js} +1 -1
  61. package/.output/public/_nuxt/{C0JKNMDO.js → CUN4bYcg.js} +1 -1
  62. package/.output/public/_nuxt/{CmzH6R-N.js → CXoITXft.js} +19 -19
  63. package/.output/public/_nuxt/CYjcQPl-.js +1 -0
  64. package/.output/public/_nuxt/{DGX0tzL8.js → CZ32KfaS.js} +1 -1
  65. package/.output/public/_nuxt/CclZMdca.js +1 -0
  66. package/.output/public/_nuxt/{C69W7k2j.js → CdpT_Vb6.js} +1 -1
  67. package/.output/public/_nuxt/CflRLvFC.js +1 -0
  68. package/.output/public/_nuxt/{gBC9k4Qj.js → CkqNv7sq.js} +2 -2
  69. package/.output/public/_nuxt/ClXDAYjE.js +1 -0
  70. package/.output/public/_nuxt/CrZGoMo_.js +1 -0
  71. package/.output/public/_nuxt/{BZXMQuYP.js → CvJtd2Af.js} +1 -1
  72. package/.output/public/_nuxt/{DKZxeXDQ.js → Cwtd8e-P.js} +1 -1
  73. package/.output/public/_nuxt/{nIU2F7ia.js → Cx44SSNp.js} +3 -3
  74. package/.output/public/_nuxt/{BzOqrmGa.js → CxEVzuCn.js} +3 -3
  75. package/.output/public/_nuxt/{Dy_Cq5LQ.js → CzIMQevQ.js} +1 -1
  76. package/.output/public/_nuxt/{D6t3dcTl.js → D0P9llU7.js} +1 -1
  77. package/.output/public/_nuxt/{JJ3634gV.js → D1DYuOOm.js} +1 -1
  78. package/.output/public/_nuxt/{BAIz-dEB.js → D1dDc8Vw.js} +1 -1
  79. package/.output/public/_nuxt/{DSRrg8JT.js → D1r0uqf3.js} +1 -1
  80. package/.output/public/_nuxt/{CNnJrDvu.js → D3a8R1T6.js} +1 -1
  81. package/.output/public/_nuxt/{B1X4Bzcy.js → D5EZbuub.js} +1 -1
  82. package/.output/public/_nuxt/D9V13KTK.js +1 -0
  83. package/.output/public/_nuxt/DAE2hbP7.js +1 -0
  84. package/.output/public/_nuxt/{Cvp7FI3T.js → DAIbdyS6.js} +1 -1
  85. package/.output/public/_nuxt/{EuOqK1A6.js → DAvlXjt0.js} +1 -1
  86. package/.output/public/_nuxt/DBKzwexZ.js +1 -0
  87. package/.output/public/_nuxt/{wCGVE8_e.js → DEATxnaF.js} +1 -1
  88. package/.output/public/_nuxt/{cABRLVee.js → DFg8PvHV.js} +1 -1
  89. package/.output/public/_nuxt/DM4MyqI-.js +1 -0
  90. package/.output/public/_nuxt/{Cdt3I3Go.js → DNE7kw9s.js} +1 -1
  91. package/.output/public/_nuxt/DO0oG4fG.js +1 -0
  92. package/.output/public/_nuxt/{B6S_ob86.js → DPFugPaB.js} +1 -1
  93. package/.output/public/_nuxt/{DJjDvbZE.js → DQlXU6_H.js} +1 -1
  94. package/.output/public/_nuxt/DQvuQpwh.js +1 -0
  95. package/.output/public/_nuxt/{sf57orEk.js → DRlG_bnX.js} +1 -1
  96. package/.output/public/_nuxt/{C6RC3lA1.js → DSQj-oMk.js} +1 -1
  97. package/.output/public/_nuxt/{CeIVm4A3.js → DU6ewLkE.js} +1 -1
  98. package/.output/public/_nuxt/{Cp2MA0cm.js → DWhzQg7B.js} +1 -1
  99. package/.output/public/_nuxt/{DJMS2og1.js → D_vK6VPK.js} +1 -1
  100. package/.output/public/_nuxt/{CihWZmJe.js → DaBp0Gba.js} +2 -2
  101. package/.output/public/_nuxt/DaH2FbAy.js +1 -0
  102. package/.output/public/_nuxt/{CtYFj7k1.js → DaJo0CeV.js} +1 -1
  103. package/.output/public/_nuxt/DauLdT7p.js +1 -0
  104. package/.output/public/_nuxt/{DG-T44jj.js → DdPA4eTX.js} +1 -1
  105. package/.output/public/_nuxt/{YuTZB7sD.js → DeAGWdWK.js} +1 -1
  106. package/.output/public/_nuxt/{CitkKxhw.js → DfF1qofg.js} +1 -1
  107. package/.output/public/_nuxt/{Daz4MeL6.js → DiGBA-aA.js} +1 -1
  108. package/.output/public/_nuxt/DiJxF69i.js +1 -0
  109. package/.output/public/_nuxt/{DIoI0uJm.js → DkBIU-1F.js} +1 -1
  110. package/.output/public/_nuxt/DmAM6bZ0.js +1 -0
  111. package/.output/public/_nuxt/DmeAKr3J.js +1 -0
  112. package/.output/public/_nuxt/DmmTnMzZ.js +1 -0
  113. package/.output/public/_nuxt/{Lwdv_RKd.js → DqsUSndS.js} +1 -1
  114. package/.output/public/_nuxt/Dvw-hR3Y.js +1 -0
  115. package/.output/public/_nuxt/{CVgTJeSq.js → Dz6sfh81.js} +1 -1
  116. package/.output/public/_nuxt/{BYjadNrw.js → FNhYm5FX.js} +1 -1
  117. package/.output/public/_nuxt/{Nb2jBtYT.js → HOeKUnra.js} +1 -1
  118. package/.output/public/_nuxt/{CtchsY6e.js → IR1jkN7B.js} +1 -1
  119. package/.output/public/_nuxt/{DCzfkCGa.js → MpTk6K7N.js} +1 -1
  120. package/.output/public/_nuxt/NZ7Wz6LP.js +1 -0
  121. package/.output/public/_nuxt/{DfQu3kEw.js → PqWbiAD2.js} +1 -1
  122. package/.output/public/_nuxt/{Jez9DHn7.js → Tu4FhMRc.js} +1 -1
  123. package/.output/public/_nuxt/{B3y_Qqox.js → UKPXYG4z.js} +1 -1
  124. package/.output/public/_nuxt/{BlAZO7nq.js → UO2Y9Nve.js} +1 -1
  125. package/.output/public/_nuxt/{KKK6HVeG.js → XHiJSquP.js} +1 -1
  126. package/.output/public/_nuxt/YGWAImQo.js +1 -0
  127. package/.output/public/_nuxt/{ghuJ76mD.js → ZR87XvwB.js} +1 -1
  128. package/.output/public/_nuxt/{yNrp2XvX.js → _E89BQAO.js} +1 -1
  129. package/.output/public/_nuxt/{C_BdYLzz.js → aiXk7zRt.js} +1 -1
  130. package/.output/public/_nuxt/builds/latest.json +1 -1
  131. package/.output/public/_nuxt/builds/meta/91727fcc-bf7f-407f-9b1e-092017fcfee0.json +1 -0
  132. package/.output/public/_nuxt/cL7whuPe.js +1 -0
  133. package/.output/public/_nuxt/{BasgsT_S.js → ct6_k5IW.js} +1 -1
  134. package/.output/public/_nuxt/entry._7ZkP07A.css +1 -0
  135. package/.output/public/_nuxt/{DTDgHTuh.js → fEUQvmn8.js} +2 -2
  136. package/.output/public/_nuxt/{FNC8XZTk.js → gGlaVUMD.js} +1 -1
  137. package/.output/public/_nuxt/gjmGkVlL.js +1 -0
  138. package/.output/public/_nuxt/{IRSbVPIu.js → m5001Uvl.js} +1 -1
  139. package/.output/public/_nuxt/{_CYZi8HN.js → mQkFCz_M.js} +1 -1
  140. package/.output/public/_nuxt/{BxXOsXrM.js → p9l1LjVc.js} +10 -10
  141. package/.output/public/_nuxt/{BsEZoHd1.js → qR_K5W8V.js} +1 -1
  142. package/.output/public/_nuxt/{BrNqhp1a.js → t_9QQ4MF.js} +7 -7
  143. package/.output/public/_nuxt/{pcUI-zuY.js → uc4c4mfb.js} +1 -1
  144. package/.output/public/_nuxt/{usage.vakN1lvi.css → usage.BDeyCZwW.css} +1 -1
  145. package/.output/public/_nuxt/wPSLEMBw.js +1 -0
  146. package/.output/public/_nuxt/xKRwul0f.js +1 -0
  147. package/.output/public/_nuxt/{BWhMnjID.js → xgpiGSxb.js} +1 -1
  148. package/.output/public/_nuxt/xxnk7j0F.js +1 -0
  149. package/.output/public/favicon.svg +1 -0
  150. package/.output/server/chunks/build/A-BWukSPjS.mjs +1 -0
  151. package/.output/server/chunks/build/Accordion-BaJYea6e.mjs +1 -0
  152. package/.output/server/chunks/build/AccordionItem-DdG2zgcN.mjs +1 -0
  153. package/.output/server/chunks/build/Badge-BrU9UkCv.mjs +1 -0
  154. package/.output/server/chunks/build/Blockquote-DND8wTkU.mjs +1 -0
  155. package/.output/server/chunks/build/Callout-1halpaEg.mjs +1 -0
  156. package/.output/server/chunks/build/Card-BHCSDKDt.mjs +1 -0
  157. package/.output/server/chunks/build/CardGroup-BOuJcNGp.mjs +1 -0
  158. package/.output/server/chunks/build/Caution-BP3y-TcC.mjs +1 -0
  159. package/.output/server/chunks/build/Code-B1xkAS5a.mjs +1 -0
  160. package/.output/server/chunks/build/CodeCollapse-BIhaNa22.mjs +1 -0
  161. package/.output/server/chunks/build/CodeGroup-BviYyCuo.mjs +1 -0
  162. package/.output/server/chunks/build/CodeIcon-CWD5HcV7.mjs +2 -1
  163. package/.output/server/chunks/build/CodePreview-D8PsCQ6m.mjs +1 -0
  164. package/.output/server/chunks/build/CodeTree-BUTLupmL.mjs +1 -0
  165. package/.output/server/chunks/build/Collapsible-BIvXNaSq.mjs +1 -0
  166. package/.output/server/chunks/build/DropdownMenu-BBrV9nXz.mjs +1 -1
  167. package/.output/server/chunks/build/EditorToolbar-DIfb5arC.mjs +1 -1
  168. package/.output/server/chunks/build/Em-DsIz_BnD.mjs +1 -0
  169. package/.output/server/chunks/build/Field-cwwmSQDT.mjs +1 -0
  170. package/.output/server/chunks/build/FieldGroup-CAIpQv8s.mjs +1 -0
  171. package/.output/server/chunks/build/H1-BbFNsPyP.mjs +1 -0
  172. package/.output/server/chunks/build/H2-vHTl_pWr.mjs +1 -0
  173. package/.output/server/chunks/build/H3-7eTcfO3s.mjs +1 -0
  174. package/.output/server/chunks/build/H4-C89p_PKO.mjs +1 -0
  175. package/.output/server/chunks/build/Hr-Bm8RlL3O.mjs +1 -0
  176. package/.output/server/chunks/build/Icon-Dp9iy0BI.mjs +1 -0
  177. package/.output/server/chunks/build/Img-CWLmvN1t.mjs +2 -1
  178. package/.output/server/chunks/build/Kbd-CQG6I_Ch.mjs +1 -0
  179. package/.output/server/chunks/build/Li-Bw1QUaGv.mjs +1 -0
  180. package/.output/server/chunks/build/MDC-Dx0YPDhe.mjs +1 -1
  181. package/.output/server/chunks/build/Note-CHkjm9jm.mjs +1 -0
  182. package/.output/server/chunks/build/Ol-D-fPnfFM.mjs +1 -0
  183. package/.output/server/chunks/build/P-B5YI1V9y.mjs +1 -0
  184. package/.output/server/chunks/build/Pre-ChiJcf3C.mjs +1 -0
  185. package/.output/server/chunks/build/ProseH5-DahJyv8h.mjs +1 -0
  186. package/.output/server/chunks/build/ProseH6-C4Is5h6c.mjs +1 -0
  187. package/.output/server/chunks/build/Select-BB1oLrCD.mjs +1 -1
  188. package/.output/server/chunks/build/SelectMenu-DPssg6zD.mjs +1 -1
  189. package/.output/server/chunks/build/Steps-BZpvXfzb.mjs +1 -0
  190. package/.output/server/chunks/build/Strong-DXJqOWL3.mjs +1 -0
  191. package/.output/server/chunks/build/Table-BSrLZ7dt.mjs +1 -0
  192. package/.output/server/chunks/build/Table-DCwTlhCj.mjs +1 -1
  193. package/.output/server/chunks/build/Tabs-Dk3nvOFF.mjs +1 -0
  194. package/.output/server/chunks/build/TabsItem-CDhyuBtJ.mjs +1 -0
  195. package/.output/server/chunks/build/Tbody-CjMT5oH-.mjs +1 -0
  196. package/.output/server/chunks/build/Td-ZBVaEjFN.mjs +1 -0
  197. package/.output/server/chunks/build/Th-D317icbd.mjs +1 -0
  198. package/.output/server/chunks/build/Thead-Ca_ZESTK.mjs +1 -0
  199. package/.output/server/chunks/build/Tip-CP3oTARR.mjs +1 -0
  200. package/.output/server/chunks/build/Tooltip-TRyl6dje.mjs +1 -1
  201. package/.output/server/chunks/build/Tr-6jI8j9gD.mjs +1 -0
  202. package/.output/server/chunks/build/{docs-Dk2JnYq3.mjs → Tree-DUhXKd8y.mjs} +46 -2235
  203. package/.output/server/chunks/build/Tree-DUhXKd8y.mjs.map +1 -0
  204. package/.output/server/chunks/build/Ul-BUGj_CPb.mjs +1 -0
  205. package/.output/server/chunks/build/Warning-BJ8G6cxC.mjs +1 -0
  206. package/.output/server/chunks/build/_id_-DN00UDdO.mjs +1 -0
  207. package/.output/server/chunks/build/_id_-DN00UDdO.mjs.map +1 -1
  208. package/.output/server/chunks/build/_name_-BnS_KEfX.mjs +1592 -0
  209. package/.output/server/chunks/build/_name_-BnS_KEfX.mjs.map +1 -0
  210. package/.output/server/chunks/build/{_uuid_-0UgdUhfY.mjs → _uuid_-DfJaumTE.mjs} +5 -4
  211. package/.output/server/chunks/build/{_uuid_-0UgdUhfY.mjs.map → _uuid_-DfJaumTE.mjs.map} +1 -1
  212. package/.output/server/chunks/build/auth-BGPNH2QJ.mjs +20 -0
  213. package/.output/server/chunks/build/auth-BGPNH2QJ.mjs.map +1 -0
  214. package/.output/server/chunks/build/auth-CvD7MqKW.mjs +1 -0
  215. package/.output/server/chunks/build/auth-CvD7MqKW.mjs.map +1 -1
  216. package/.output/server/chunks/build/chat-CZMiB68R.mjs +1 -0
  217. package/.output/server/chunks/build/chat-CZMiB68R.mjs.map +1 -1
  218. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  219. package/.output/server/chunks/build/cookie-C_iulBi6.mjs +1 -1
  220. package/.output/server/chunks/build/{dashboard-YEscLBQN.mjs → dashboard-CLk1NlbR.mjs} +15 -4
  221. package/.output/server/chunks/build/dashboard-CLk1NlbR.mjs.map +1 -0
  222. package/.output/server/chunks/build/{dashboard-CpMVYnDV.mjs → dashboard-CiVTAZuF.mjs} +12 -4
  223. package/.output/server/chunks/build/{dashboard-CpMVYnDV.mjs.map → dashboard-CiVTAZuF.mjs.map} +1 -1
  224. package/.output/server/chunks/build/docs-ChGwOPg5.mjs +2204 -0
  225. package/.output/server/chunks/build/docs-ChGwOPg5.mjs.map +1 -0
  226. package/.output/server/chunks/build/error-404-BzbcNcdU.mjs +1 -0
  227. package/.output/server/chunks/build/error-500-uCDjGRW8.mjs +1 -0
  228. package/.output/server/chunks/build/fetch-BB7Qzkwe.mjs +1 -1
  229. package/.output/server/chunks/build/{hooks-DP8WoUPS.mjs → hooks-D328DcO6.mjs} +3 -2
  230. package/.output/server/chunks/build/hooks-D328DcO6.mjs.map +1 -0
  231. package/.output/server/chunks/build/{index-DVx-QlhP.mjs → index-Byt-3Yq6.mjs} +3 -2
  232. package/.output/server/chunks/build/{index-DVx-QlhP.mjs.map → index-Byt-3Yq6.mjs.map} +1 -1
  233. package/.output/server/chunks/build/{index-Ba_bPJgk.mjs → index-C9PuieXh.mjs} +3 -2
  234. package/.output/server/chunks/build/index-C9PuieXh.mjs.map +1 -0
  235. package/.output/server/chunks/build/index-C_LcBBgO.mjs +1508 -0
  236. package/.output/server/chunks/build/index-C_LcBBgO.mjs.map +1 -0
  237. package/.output/server/chunks/build/index-CxDxc9fm.mjs +1 -1
  238. package/.output/server/chunks/build/index-DzdvIi8V.mjs +1 -0
  239. package/.output/server/chunks/build/library-CbWcF5wT.mjs +601 -0
  240. package/.output/server/chunks/build/library-CbWcF5wT.mjs.map +1 -0
  241. package/.output/server/chunks/build/{login-BAysbpyX.mjs → login-DnnElTl2.mjs} +15 -7
  242. package/.output/server/chunks/build/{login-BAysbpyX.mjs.map → login-DnnElTl2.mjs.map} +1 -1
  243. package/.output/server/chunks/build/memories-BqA719O1.mjs +1 -0
  244. package/.output/server/chunks/build/memories-BqA719O1.mjs.map +1 -1
  245. package/.output/server/chunks/build/server.mjs +62 -34
  246. package/.output/server/chunks/build/server.mjs.map +1 -1
  247. package/.output/server/chunks/build/settings-DdkKCJ00.mjs +1 -0
  248. package/.output/server/chunks/build/settings-DdkKCJ00.mjs.map +1 -1
  249. package/.output/server/chunks/build/styles.mjs +2 -2
  250. package/.output/server/chunks/build/{tasks-DiOi1HG_.mjs → tasks-DnAFqbtt.mjs} +3 -2
  251. package/.output/server/chunks/build/tasks-DnAFqbtt.mjs.map +1 -0
  252. package/.output/server/chunks/build/{usage-H_mcd_fz.mjs → usage-CSrBh4Or.mjs} +159 -44
  253. package/.output/server/chunks/build/{usage-H_mcd_fz.mjs.map → usage-CSrBh4Or.mjs.map} +1 -1
  254. package/.output/server/chunks/build/{usePreferences-CzC8fRzd.mjs → usePreferences-DH1QjxOj.mjs} +7 -1
  255. package/.output/server/chunks/build/usePreferences-DH1QjxOj.mjs.map +1 -0
  256. package/.output/server/chunks/build/{view-Dc8mvzCB.mjs → view-n2sYa4Zh.mjs} +4 -3
  257. package/.output/server/chunks/build/{view-Dc8mvzCB.mjs.map → view-n2sYa4Zh.mjs.map} +1 -1
  258. package/.output/server/chunks/build/virtual_nuxt__Users_tony_Documents_GitHub_second-brain_node_modules_.cache_nuxt_.nuxt_mdc-imports-PtwWlZ2H.mjs +1 -0
  259. package/.output/server/chunks/nitro/nitro.mjs +1247 -824
  260. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  261. package/.output/server/chunks/routes/_ws/chat.mjs +2 -1
  262. package/.output/server/chunks/routes/_ws/chat.mjs.map +1 -1
  263. package/.output/server/chunks/routes/api/agents/_id/cancel.post.mjs +1 -0
  264. package/.output/server/chunks/routes/api/agents/_id/cancel.post.mjs.map +1 -1
  265. package/.output/server/chunks/routes/api/agents/_id/run.post.mjs +1 -0
  266. package/.output/server/chunks/routes/api/agents/_id/run.post.mjs.map +1 -1
  267. package/.output/server/chunks/routes/api/agents/_id/runs.get.mjs +1 -0
  268. package/.output/server/chunks/routes/api/agents/_id/runs.get.mjs.map +1 -1
  269. package/.output/server/chunks/routes/api/agents/_id/stats.get.mjs +1 -0
  270. package/.output/server/chunks/routes/api/agents/_id/stats.get.mjs.map +1 -1
  271. package/.output/server/chunks/routes/api/agents/_id_.delete.mjs +1 -0
  272. package/.output/server/chunks/routes/api/agents/_id_.delete.mjs.map +1 -1
  273. package/.output/server/chunks/routes/api/agents/_id_.get.mjs +1 -0
  274. package/.output/server/chunks/routes/api/agents/_id_.get.mjs.map +1 -1
  275. package/.output/server/chunks/routes/api/agents/_id_.patch.mjs +1 -0
  276. package/.output/server/chunks/routes/api/agents/_id_.patch.mjs.map +1 -1
  277. package/.output/server/chunks/routes/api/agents/stats.get.mjs +1 -0
  278. package/.output/server/chunks/routes/api/agents/stats.get.mjs.map +1 -1
  279. package/.output/server/chunks/routes/api/auth/_...all_.mjs +1 -0
  280. package/.output/server/chunks/routes/api/auth/_...all_.mjs.map +1 -1
  281. package/.output/server/chunks/routes/api/conversations/_id_.delete.mjs +1 -0
  282. package/.output/server/chunks/routes/api/conversations/_id_.delete.mjs.map +1 -1
  283. package/.output/server/chunks/routes/api/conversations/_id_.get.mjs +1 -0
  284. package/.output/server/chunks/routes/api/conversations/_id_.get.mjs.map +1 -1
  285. package/.output/server/chunks/routes/api/dashboard/overview.get.mjs +1 -0
  286. package/.output/server/chunks/routes/api/dashboard/overview.get.mjs.map +1 -1
  287. package/.output/server/chunks/routes/api/documents/_id/public.get.mjs +1 -0
  288. package/.output/server/chunks/routes/api/documents/_id/public.get.mjs.map +1 -1
  289. package/.output/server/chunks/routes/api/documents/_id/restore.post.mjs +1 -0
  290. package/.output/server/chunks/routes/api/documents/_id/restore.post.mjs.map +1 -1
  291. package/.output/server/chunks/routes/api/documents/by-path.post.mjs +1 -0
  292. package/.output/server/chunks/routes/api/documents/by-path.post.mjs.map +1 -1
  293. package/.output/server/chunks/routes/api/documents/index.delete.mjs +1 -0
  294. package/.output/server/chunks/routes/api/documents/index.delete.mjs.map +1 -1
  295. package/.output/server/chunks/routes/api/documents/index.put.mjs +1 -0
  296. package/.output/server/chunks/routes/api/documents/index.put.mjs.map +1 -1
  297. package/.output/server/chunks/routes/api/fs/delete.post.mjs +1 -0
  298. package/.output/server/chunks/routes/api/fs/delete.post.mjs.map +1 -1
  299. package/.output/server/chunks/routes/api/fs/list.get.mjs +1 -0
  300. package/.output/server/chunks/routes/api/fs/list.get.mjs.map +1 -1
  301. package/.output/server/chunks/routes/api/fs/mkdir.post.mjs +1 -0
  302. package/.output/server/chunks/routes/api/fs/mkdir.post.mjs.map +1 -1
  303. package/.output/server/chunks/routes/api/fs/move.post.mjs +1 -0
  304. package/.output/server/chunks/routes/api/fs/move.post.mjs.map +1 -1
  305. package/.output/server/chunks/routes/api/fs/read.post.mjs +1 -0
  306. package/.output/server/chunks/routes/api/fs/read.post.mjs.map +1 -1
  307. package/.output/server/chunks/routes/api/fs/rename.post.mjs +1 -0
  308. package/.output/server/chunks/routes/api/fs/rename.post.mjs.map +1 -1
  309. package/.output/server/chunks/routes/api/fs/write.post.mjs +1 -0
  310. package/.output/server/chunks/routes/api/fs/write.post.mjs.map +1 -1
  311. package/.output/server/chunks/routes/api/health.get.mjs +1 -0
  312. package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
  313. package/.output/server/chunks/routes/api/home.get.mjs +1 -0
  314. package/.output/server/chunks/routes/api/home.get.mjs.map +1 -1
  315. package/.output/server/chunks/routes/api/hooks/index.get.mjs +1 -0
  316. package/.output/server/chunks/routes/api/hooks/index.get.mjs.map +1 -1
  317. package/.output/server/chunks/routes/api/hooks/index.post.mjs +1 -0
  318. package/.output/server/chunks/routes/api/hooks/index.post.mjs.map +1 -1
  319. package/.output/server/chunks/routes/api/hooks/stats.get.mjs +1 -0
  320. package/.output/server/chunks/routes/api/hooks/stats.get.mjs.map +1 -1
  321. package/.output/server/chunks/routes/api/index.get.mjs +1 -0
  322. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  323. package/.output/server/chunks/routes/api/index.get2.mjs +1 -0
  324. package/.output/server/chunks/routes/api/index.get2.mjs.map +1 -1
  325. package/.output/server/chunks/routes/api/index.get3.mjs +1 -0
  326. package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -1
  327. package/.output/server/chunks/routes/api/index.get4.mjs +1 -0
  328. package/.output/server/chunks/routes/api/index.get4.mjs.map +1 -1
  329. package/.output/server/chunks/routes/api/index.get5.mjs +1 -0
  330. package/.output/server/chunks/routes/api/index.get5.mjs.map +1 -1
  331. package/.output/server/chunks/routes/api/index.get6.mjs +1 -0
  332. package/.output/server/chunks/routes/api/index.get6.mjs.map +1 -1
  333. package/.output/server/chunks/routes/api/index.get7.mjs +40 -38
  334. package/.output/server/chunks/routes/api/index.get7.mjs.map +1 -1
  335. package/.output/server/chunks/routes/api/index.get8.mjs +33 -38
  336. package/.output/server/chunks/routes/api/index.get8.mjs.map +1 -1
  337. package/.output/server/chunks/routes/api/index.get9.mjs +83 -0
  338. package/.output/server/chunks/routes/api/index.get9.mjs.map +1 -0
  339. package/.output/server/chunks/routes/api/index.post.mjs +1 -0
  340. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  341. package/.output/server/chunks/routes/api/index.post2.mjs +1 -0
  342. package/.output/server/chunks/routes/api/index.post2.mjs.map +1 -1
  343. package/.output/server/chunks/routes/api/index.post3.mjs +1 -0
  344. package/.output/server/chunks/routes/api/index.post3.mjs.map +1 -1
  345. package/.output/server/chunks/routes/api/index.post4.mjs +1 -0
  346. package/.output/server/chunks/routes/api/index.post4.mjs.map +1 -1
  347. package/.output/server/chunks/routes/api/index.put.mjs +1 -0
  348. package/.output/server/chunks/routes/api/index.put.mjs.map +1 -1
  349. package/.output/server/chunks/routes/api/memory/_id_.delete.mjs +1 -0
  350. package/.output/server/chunks/routes/api/memory/_id_.delete.mjs.map +1 -1
  351. package/.output/server/chunks/routes/api/memory/context.get.mjs +1 -0
  352. package/.output/server/chunks/routes/api/memory/context.get.mjs.map +1 -1
  353. package/.output/server/chunks/routes/api/memory/extract.post.mjs +2 -1
  354. package/.output/server/chunks/routes/api/memory/extract.post.mjs.map +1 -1
  355. package/.output/server/chunks/routes/api/memory/search.get.mjs +1 -0
  356. package/.output/server/chunks/routes/api/memory/search.get.mjs.map +1 -1
  357. package/.output/server/chunks/routes/api/memory/store.post.mjs +1 -0
  358. package/.output/server/chunks/routes/api/memory/store.post.mjs.map +1 -1
  359. package/.output/server/chunks/routes/api/projects/index.delete.mjs +1 -0
  360. package/.output/server/chunks/routes/api/projects/index.delete.mjs.map +1 -1
  361. package/.output/server/chunks/routes/api/projects/index.get.mjs +1 -0
  362. package/.output/server/chunks/routes/api/projects/index.get.mjs.map +1 -1
  363. package/.output/server/chunks/routes/api/projects/index.put.mjs +1 -0
  364. package/.output/server/chunks/routes/api/projects/index.put.mjs.map +1 -1
  365. package/.output/server/chunks/routes/api/secrets/_key_.delete.mjs +1 -0
  366. package/.output/server/chunks/routes/api/secrets/_key_.delete.mjs.map +1 -1
  367. package/.output/server/chunks/routes/api/secrets/_key_.get.mjs +1 -0
  368. package/.output/server/chunks/routes/api/secrets/_key_.get.mjs.map +1 -1
  369. package/.output/server/chunks/routes/api/secrets/_key_.put.mjs +1 -0
  370. package/.output/server/chunks/routes/api/secrets/_key_.put.mjs.map +1 -1
  371. package/.output/server/chunks/routes/api/skills/_name/export.get.mjs +72 -0
  372. package/.output/server/chunks/routes/api/skills/_name/export.get.mjs.map +1 -0
  373. package/.output/server/chunks/routes/api/skills/_name/files/create.post.mjs +73 -0
  374. package/.output/server/chunks/routes/api/skills/_name/files/create.post.mjs.map +1 -0
  375. package/.output/server/chunks/routes/api/skills/_name/files/delete.post.mjs +71 -0
  376. package/.output/server/chunks/routes/api/skills/_name/files/delete.post.mjs.map +1 -0
  377. package/.output/server/chunks/routes/api/skills/_name/files/read.post.mjs +69 -0
  378. package/.output/server/chunks/routes/api/skills/_name/files/read.post.mjs.map +1 -0
  379. package/.output/server/chunks/routes/api/skills/_name/files/write.post.mjs +69 -0
  380. package/.output/server/chunks/routes/api/skills/_name/files/write.post.mjs.map +1 -0
  381. package/.output/server/chunks/routes/api/skills/_name/index.get.mjs +60 -0
  382. package/.output/server/chunks/routes/api/skills/_name/index.get.mjs.map +1 -0
  383. package/.output/server/chunks/routes/api/skills/_name/rename.post.mjs +87 -0
  384. package/.output/server/chunks/routes/api/skills/_name/rename.post.mjs.map +1 -0
  385. package/.output/server/chunks/routes/api/skills/_name/toggle.post.mjs +62 -0
  386. package/.output/server/chunks/routes/api/skills/_name/toggle.post.mjs.map +1 -0
  387. package/.output/server/chunks/routes/api/skills/create.post.mjs +79 -0
  388. package/.output/server/chunks/routes/api/skills/create.post.mjs.map +1 -0
  389. package/.output/server/chunks/routes/api/skills/generate.post.mjs +143 -0
  390. package/.output/server/chunks/routes/api/skills/generate.post.mjs.map +1 -0
  391. package/.output/server/chunks/routes/api/skills/import.post.mjs +96 -0
  392. package/.output/server/chunks/routes/api/skills/import.post.mjs.map +1 -0
  393. package/.output/server/chunks/routes/api/skills/index.get.mjs +82 -0
  394. package/.output/server/chunks/routes/api/skills/index.get.mjs.map +1 -0
  395. package/.output/server/chunks/routes/api/skills/index.get2.mjs +83 -0
  396. package/.output/server/chunks/routes/api/skills/index.get2.mjs.map +1 -0
  397. package/.output/server/chunks/routes/api/skills/library/check-updates.get.mjs +72 -0
  398. package/.output/server/chunks/routes/api/skills/library/check-updates.get.mjs.map +1 -0
  399. package/.output/server/chunks/routes/api/skills/library/install.post.mjs +90 -0
  400. package/.output/server/chunks/routes/api/skills/library/install.post.mjs.map +1 -0
  401. package/.output/server/chunks/routes/api/tasks/_id/restore.post.mjs +1 -0
  402. package/.output/server/chunks/routes/api/tasks/_id/restore.post.mjs.map +1 -1
  403. package/.output/server/chunks/routes/api/tasks/index.delete.mjs +1 -0
  404. package/.output/server/chunks/routes/api/tasks/index.delete.mjs.map +1 -1
  405. package/.output/server/chunks/routes/api/tasks/index.get.mjs +1 -0
  406. package/.output/server/chunks/routes/api/tasks/index.get.mjs.map +1 -1
  407. package/.output/server/chunks/routes/api/tasks/index.put.mjs +1 -0
  408. package/.output/server/chunks/routes/api/tasks/index.put.mjs.map +1 -1
  409. package/.output/server/chunks/routes/api/tasks/tags.get.mjs +1 -0
  410. package/.output/server/chunks/routes/api/tasks/tags.get.mjs.map +1 -1
  411. package/.output/server/chunks/routes/api/usage/stats.get.mjs +4 -1
  412. package/.output/server/chunks/routes/api/usage/stats.get.mjs.map +1 -1
  413. package/.output/server/chunks/routes/api/user/email.patch.mjs +2 -1
  414. package/.output/server/chunks/routes/api/user/email.patch.mjs.map +1 -1
  415. package/.output/server/chunks/routes/notifications.mjs +2 -1
  416. package/.output/server/chunks/routes/notifications.mjs.map +1 -1
  417. package/.output/server/chunks/routes/renderer.mjs +2 -2
  418. package/.output/server/chunks/routes/terminal.mjs +2 -1
  419. package/.output/server/chunks/routes/terminal.mjs.map +1 -1
  420. package/.output/server/index.mjs +2 -1
  421. package/.output/server/index.mjs.map +1 -1
  422. package/.output/server/node_modules/adm-zip/adm-zip.js +949 -0
  423. package/.output/server/node_modules/adm-zip/headers/entryHeader.js +374 -0
  424. package/.output/server/node_modules/adm-zip/headers/index.js +2 -0
  425. package/.output/server/node_modules/adm-zip/headers/mainHeader.js +130 -0
  426. package/.output/server/node_modules/adm-zip/methods/deflater.js +33 -0
  427. package/.output/server/node_modules/adm-zip/methods/index.js +3 -0
  428. package/.output/server/node_modules/adm-zip/methods/inflater.js +34 -0
  429. package/.output/server/node_modules/adm-zip/methods/zipcrypto.js +175 -0
  430. package/.output/server/node_modules/adm-zip/package.json +49 -0
  431. package/.output/server/node_modules/adm-zip/util/constants.js +142 -0
  432. package/.output/server/node_modules/adm-zip/util/decoder.js +5 -0
  433. package/.output/server/node_modules/adm-zip/util/errors.js +63 -0
  434. package/.output/server/node_modules/adm-zip/util/fattr.js +76 -0
  435. package/.output/server/node_modules/adm-zip/util/index.js +5 -0
  436. package/.output/server/node_modules/adm-zip/util/utils.js +336 -0
  437. package/.output/server/node_modules/adm-zip/zipEntry.js +405 -0
  438. package/.output/server/node_modules/adm-zip/zipFile.js +446 -0
  439. package/.output/server/package.json +2 -1
  440. package/README.md +3 -0
  441. package/app/app.vue +1 -1
  442. package/app/components/dashboard/StatCards.vue +21 -2
  443. package/app/components/usage/UsageCostChart.client.vue +59 -23
  444. package/app/components/usage/UsageCostChart.server.vue +1 -0
  445. package/app/components/usage/UsageSourceDonut.client.vue +17 -5
  446. package/app/components/usage/UsageSourceDonut.server.vue +1 -0
  447. package/app/components/usage/UsageTopConsumers.vue +13 -3
  448. package/app/composables/usePreferences.ts +9 -1
  449. package/app/layouts/auth.vue +0 -10
  450. package/app/pages/login.vue +18 -8
  451. package/app/pages/skills/[name].vue +12 -0
  452. package/app/pages/skills/index.vue +47 -0
  453. package/app/pages/usage.vue +43 -16
  454. package/dist/cli/index.js +12 -13
  455. package/package.json +5 -3
  456. package/server/api/skills/[name]/export.get.ts +45 -0
  457. package/server/api/skills/import.post.ts +87 -0
  458. package/server/api/usage/stats.get.ts +4 -2
  459. package/shared/types/index.ts +2 -1
  460. package/.output/public/_nuxt/5ZXA0Ckq.js +0 -1
  461. package/.output/public/_nuxt/BIIJhjQO.js +0 -1
  462. package/.output/public/_nuxt/BIckl6wA.js +0 -1
  463. package/.output/public/_nuxt/BJ3o57WW.js +0 -1
  464. package/.output/public/_nuxt/BNetzZzF.js +0 -1
  465. package/.output/public/_nuxt/BS0ofHJK.js +0 -1
  466. package/.output/public/_nuxt/B_3_hrpn.js +0 -1
  467. package/.output/public/_nuxt/BaBZjmMC.js +0 -1
  468. package/.output/public/_nuxt/BaMqDm5u.js +0 -1
  469. package/.output/public/_nuxt/BhzMoffi.js +0 -1
  470. package/.output/public/_nuxt/BlhFigLL.js +0 -1
  471. package/.output/public/_nuxt/BoIxv-gM.js +0 -1
  472. package/.output/public/_nuxt/Br19oYkq.js +0 -1
  473. package/.output/public/_nuxt/C0kh_F7v.js +0 -1
  474. package/.output/public/_nuxt/C61KgSco.js +0 -1
  475. package/.output/public/_nuxt/CJUdYEdO.js +0 -1
  476. package/.output/public/_nuxt/CVJQGP1Q.js +0 -1
  477. package/.output/public/_nuxt/CWMUi89H.js +0 -1
  478. package/.output/public/_nuxt/Cdu2qGgq.js +0 -1
  479. package/.output/public/_nuxt/CeIu7z4p.js +0 -1
  480. package/.output/public/_nuxt/D2689qk4.js +0 -1
  481. package/.output/public/_nuxt/D31L7Ks6.js +0 -1
  482. package/.output/public/_nuxt/DB359q8R.js +0 -1
  483. package/.output/public/_nuxt/DHG66LPS.js +0 -1
  484. package/.output/public/_nuxt/DJ5V-y_x.js +0 -1
  485. package/.output/public/_nuxt/DLETdGFL.js +0 -1
  486. package/.output/public/_nuxt/DOICd-Ld.js +0 -1
  487. package/.output/public/_nuxt/DPEcH-gi.js +0 -65
  488. package/.output/public/_nuxt/Db8-_gO7.js +0 -1
  489. package/.output/public/_nuxt/DgV-EDJ9.js +0 -1
  490. package/.output/public/_nuxt/Dp2X5R2m.js +0 -1
  491. package/.output/public/_nuxt/DqB723Z0.js +0 -1
  492. package/.output/public/_nuxt/Q8Ps7oN5.js +0 -1
  493. package/.output/public/_nuxt/SXTDhzp6.js +0 -1
  494. package/.output/public/_nuxt/Sg2Lwc46.js +0 -1
  495. package/.output/public/_nuxt/_J_7XIn-.js +0 -1
  496. package/.output/public/_nuxt/builds/meta/a1e9100c-1a4f-4f7e-bb53-9dbe0d07effb.json +0 -1
  497. package/.output/public/_nuxt/entry.CGxIBGAf.css +0 -1
  498. package/.output/public/_nuxt/inmzPrjz.js +0 -1
  499. package/.output/public/_nuxt/oIX-ZDN6.js +0 -1
  500. package/.output/server/chunks/build/auth-CDHRohj4.mjs +0 -77
  501. package/.output/server/chunks/build/auth-CDHRohj4.mjs.map +0 -1
  502. package/.output/server/chunks/build/dashboard-YEscLBQN.mjs.map +0 -1
  503. package/.output/server/chunks/build/docs-Dk2JnYq3.mjs.map +0 -1
  504. package/.output/server/chunks/build/hooks-DP8WoUPS.mjs.map +0 -1
  505. package/.output/server/chunks/build/index-Ba_bPJgk.mjs.map +0 -1
  506. package/.output/server/chunks/build/tasks-DiOi1HG_.mjs.map +0 -1
  507. package/.output/server/chunks/build/usePreferences-CzC8fRzd.mjs.map +0 -1
  508. /package/.output/public/_nuxt/{useCopyToClipboard.Be_IvFWy.css → CodeEditor.Be_IvFWy.css} +0 -0
@@ -0,0 +1,949 @@
1
+ const Utils = require("./util");
2
+ const pth = require("path");
3
+ const ZipEntry = require("./zipEntry");
4
+ const ZipFile = require("./zipFile");
5
+
6
+ const get_Bool = (...val) => Utils.findLast(val, (c) => typeof c === "boolean");
7
+ const get_Str = (...val) => Utils.findLast(val, (c) => typeof c === "string");
8
+ const get_Fun = (...val) => Utils.findLast(val, (c) => typeof c === "function");
9
+
10
+ const defaultOptions = {
11
+ // option "noSort" : if true it disables files sorting
12
+ noSort: false,
13
+ // read entries during load (initial loading may be slower)
14
+ readEntries: false,
15
+ // default method is none
16
+ method: Utils.Constants.NONE,
17
+ // file system
18
+ fs: null
19
+ };
20
+
21
+ module.exports = function (/**String*/ input, /** object */ options) {
22
+ let inBuffer = null;
23
+
24
+ // create object based default options, allowing them to be overwritten
25
+ const opts = Object.assign(Object.create(null), defaultOptions);
26
+
27
+ // test input variable
28
+ if (input && "object" === typeof input) {
29
+ // if value is not buffer we accept it to be object with options
30
+ if (!(input instanceof Uint8Array)) {
31
+ Object.assign(opts, input);
32
+ input = opts.input ? opts.input : undefined;
33
+ if (opts.input) delete opts.input;
34
+ }
35
+
36
+ // if input is buffer
37
+ if (Buffer.isBuffer(input)) {
38
+ inBuffer = input;
39
+ opts.method = Utils.Constants.BUFFER;
40
+ input = undefined;
41
+ }
42
+ }
43
+
44
+ // assign options
45
+ Object.assign(opts, options);
46
+
47
+ // instanciate utils filesystem
48
+ const filetools = new Utils(opts);
49
+
50
+ if (typeof opts.decoder !== "object" || typeof opts.decoder.encode !== "function" || typeof opts.decoder.decode !== "function") {
51
+ opts.decoder = Utils.decoder;
52
+ }
53
+
54
+ // if input is file name we retrieve its content
55
+ if (input && "string" === typeof input) {
56
+ // load zip file
57
+ if (filetools.fs.existsSync(input)) {
58
+ opts.method = Utils.Constants.FILE;
59
+ opts.filename = input;
60
+ inBuffer = filetools.fs.readFileSync(input);
61
+ } else {
62
+ throw Utils.Errors.INVALID_FILENAME();
63
+ }
64
+ }
65
+
66
+ // create variable
67
+ const _zip = new ZipFile(inBuffer, opts);
68
+
69
+ const { canonical, sanitize, zipnamefix } = Utils;
70
+
71
+ function getEntry(/**Object*/ entry) {
72
+ if (entry && _zip) {
73
+ var item;
74
+ // If entry was given as a file name
75
+ if (typeof entry === "string") item = _zip.getEntry(pth.posix.normalize(entry));
76
+ // if entry was given as a ZipEntry object
77
+ if (typeof entry === "object" && typeof entry.entryName !== "undefined" && typeof entry.header !== "undefined") item = _zip.getEntry(entry.entryName);
78
+
79
+ if (item) {
80
+ return item;
81
+ }
82
+ }
83
+ return null;
84
+ }
85
+
86
+ function fixPath(zipPath) {
87
+ const { join, normalize, sep } = pth.posix;
88
+ // convert windows file separators and normalize
89
+ return join(".", normalize(sep + zipPath.split("\\").join(sep) + sep));
90
+ }
91
+
92
+ function filenameFilter(filterfn) {
93
+ if (filterfn instanceof RegExp) {
94
+ // if filter is RegExp wrap it
95
+ return (function (rx) {
96
+ return function (filename) {
97
+ return rx.test(filename);
98
+ };
99
+ })(filterfn);
100
+ } else if ("function" !== typeof filterfn) {
101
+ // if filter is not function we will replace it
102
+ return () => true;
103
+ }
104
+ return filterfn;
105
+ }
106
+
107
+ // keep last character on folders
108
+ const relativePath = (local, entry) => {
109
+ let lastChar = entry.slice(-1);
110
+ lastChar = lastChar === filetools.sep ? filetools.sep : "";
111
+ return pth.relative(local, entry) + lastChar;
112
+ };
113
+
114
+ return {
115
+ /**
116
+ * Extracts the given entry from the archive and returns the content as a Buffer object
117
+ * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry
118
+ * @param {Buffer|string} [pass] - password
119
+ * @return Buffer or Null in case of error
120
+ */
121
+ readFile: function (entry, pass) {
122
+ var item = getEntry(entry);
123
+ return (item && item.getData(pass)) || null;
124
+ },
125
+
126
+ /**
127
+ * Returns how many child elements has on entry (directories) on files it is always 0
128
+ * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry
129
+ * @returns {integer}
130
+ */
131
+ childCount: function (entry) {
132
+ const item = getEntry(entry);
133
+ if (item) {
134
+ return _zip.getChildCount(item);
135
+ }
136
+ },
137
+
138
+ /**
139
+ * Asynchronous readFile
140
+ * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry
141
+ * @param {callback} callback
142
+ *
143
+ * @return Buffer or Null in case of error
144
+ */
145
+ readFileAsync: function (entry, callback) {
146
+ var item = getEntry(entry);
147
+ if (item) {
148
+ item.getDataAsync(callback);
149
+ } else {
150
+ callback(null, "getEntry failed for:" + entry);
151
+ }
152
+ },
153
+
154
+ /**
155
+ * Extracts the given entry from the archive and returns the content as plain text in the given encoding
156
+ * @param {ZipEntry|string} entry - ZipEntry object or String with the full path of the entry
157
+ * @param {string} encoding - Optional. If no encoding is specified utf8 is used
158
+ *
159
+ * @return String
160
+ */
161
+ readAsText: function (entry, encoding) {
162
+ var item = getEntry(entry);
163
+ if (item) {
164
+ var data = item.getData();
165
+ if (data && data.length) {
166
+ return data.toString(encoding || "utf8");
167
+ }
168
+ }
169
+ return "";
170
+ },
171
+
172
+ /**
173
+ * Asynchronous readAsText
174
+ * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry
175
+ * @param {callback} callback
176
+ * @param {string} [encoding] - Optional. If no encoding is specified utf8 is used
177
+ *
178
+ * @return String
179
+ */
180
+ readAsTextAsync: function (entry, callback, encoding) {
181
+ var item = getEntry(entry);
182
+ if (item) {
183
+ item.getDataAsync(function (data, err) {
184
+ if (err) {
185
+ callback(data, err);
186
+ return;
187
+ }
188
+
189
+ if (data && data.length) {
190
+ callback(data.toString(encoding || "utf8"));
191
+ } else {
192
+ callback("");
193
+ }
194
+ });
195
+ } else {
196
+ callback("");
197
+ }
198
+ },
199
+
200
+ /**
201
+ * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory
202
+ *
203
+ * @param {ZipEntry|string} entry
204
+ * @returns {void}
205
+ */
206
+ deleteFile: function (entry, withsubfolders = true) {
207
+ // @TODO: test deleteFile
208
+ var item = getEntry(entry);
209
+ if (item) {
210
+ _zip.deleteFile(item.entryName, withsubfolders);
211
+ }
212
+ },
213
+
214
+ /**
215
+ * Remove the entry from the file or directory without affecting any nested entries
216
+ *
217
+ * @param {ZipEntry|string} entry
218
+ * @returns {void}
219
+ */
220
+ deleteEntry: function (entry) {
221
+ // @TODO: test deleteEntry
222
+ var item = getEntry(entry);
223
+ if (item) {
224
+ _zip.deleteEntry(item.entryName);
225
+ }
226
+ },
227
+
228
+ /**
229
+ * Adds a comment to the zip. The zip must be rewritten after adding the comment.
230
+ *
231
+ * @param {string} comment
232
+ */
233
+ addZipComment: function (comment) {
234
+ // @TODO: test addZipComment
235
+ _zip.comment = comment;
236
+ },
237
+
238
+ /**
239
+ * Returns the zip comment
240
+ *
241
+ * @return String
242
+ */
243
+ getZipComment: function () {
244
+ return _zip.comment || "";
245
+ },
246
+
247
+ /**
248
+ * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment
249
+ * The comment cannot exceed 65535 characters in length
250
+ *
251
+ * @param {ZipEntry} entry
252
+ * @param {string} comment
253
+ */
254
+ addZipEntryComment: function (entry, comment) {
255
+ var item = getEntry(entry);
256
+ if (item) {
257
+ item.comment = comment;
258
+ }
259
+ },
260
+
261
+ /**
262
+ * Returns the comment of the specified entry
263
+ *
264
+ * @param {ZipEntry} entry
265
+ * @return String
266
+ */
267
+ getZipEntryComment: function (entry) {
268
+ var item = getEntry(entry);
269
+ if (item) {
270
+ return item.comment || "";
271
+ }
272
+ return "";
273
+ },
274
+
275
+ /**
276
+ * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content
277
+ *
278
+ * @param {ZipEntry} entry
279
+ * @param {Buffer} content
280
+ */
281
+ updateFile: function (entry, content) {
282
+ var item = getEntry(entry);
283
+ if (item) {
284
+ item.setData(content);
285
+ }
286
+ },
287
+
288
+ /**
289
+ * Adds a file from the disk to the archive
290
+ *
291
+ * @param {string} localPath File to add to zip
292
+ * @param {string} [zipPath] Optional path inside the zip
293
+ * @param {string} [zipName] Optional name for the file
294
+ * @param {string} [comment] Optional file comment
295
+ */
296
+ addLocalFile: function (localPath, zipPath, zipName, comment) {
297
+ if (filetools.fs.existsSync(localPath)) {
298
+ // fix ZipPath
299
+ zipPath = zipPath ? fixPath(zipPath) : "";
300
+
301
+ // p - local file name
302
+ const p = pth.win32.basename(pth.win32.normalize(localPath));
303
+
304
+ // add file name into zippath
305
+ zipPath += zipName ? zipName : p;
306
+
307
+ // read file attributes
308
+ const _attr = filetools.fs.statSync(localPath);
309
+
310
+ // get file content
311
+ const data = _attr.isFile() ? filetools.fs.readFileSync(localPath) : Buffer.alloc(0);
312
+
313
+ // if folder
314
+ if (_attr.isDirectory()) zipPath += filetools.sep;
315
+
316
+ // add file into zip file
317
+ this.addFile(zipPath, data, comment, _attr);
318
+ } else {
319
+ throw Utils.Errors.FILE_NOT_FOUND(localPath);
320
+ }
321
+ },
322
+
323
+ /**
324
+ * Callback for showing if everything was done.
325
+ *
326
+ * @callback doneCallback
327
+ * @param {Error} err - Error object
328
+ * @param {boolean} done - was request fully completed
329
+ */
330
+
331
+ /**
332
+ * Adds a file from the disk to the archive
333
+ *
334
+ * @param {(object|string)} options - options object, if it is string it us used as localPath.
335
+ * @param {string} options.localPath - Local path to the file.
336
+ * @param {string} [options.comment] - Optional file comment.
337
+ * @param {string} [options.zipPath] - Optional path inside the zip
338
+ * @param {string} [options.zipName] - Optional name for the file
339
+ * @param {doneCallback} callback - The callback that handles the response.
340
+ */
341
+ addLocalFileAsync: function (options, callback) {
342
+ options = typeof options === "object" ? options : { localPath: options };
343
+ const localPath = pth.resolve(options.localPath);
344
+ const { comment } = options;
345
+ let { zipPath, zipName } = options;
346
+ const self = this;
347
+
348
+ filetools.fs.stat(localPath, function (err, stats) {
349
+ if (err) return callback(err, false);
350
+ // fix ZipPath
351
+ zipPath = zipPath ? fixPath(zipPath) : "";
352
+ // p - local file name
353
+ const p = pth.win32.basename(pth.win32.normalize(localPath));
354
+ // add file name into zippath
355
+ zipPath += zipName ? zipName : p;
356
+
357
+ if (stats.isFile()) {
358
+ filetools.fs.readFile(localPath, function (err, data) {
359
+ if (err) return callback(err, false);
360
+ self.addFile(zipPath, data, comment, stats);
361
+ return setImmediate(callback, undefined, true);
362
+ });
363
+ } else if (stats.isDirectory()) {
364
+ zipPath += filetools.sep;
365
+ self.addFile(zipPath, Buffer.alloc(0), comment, stats);
366
+ return setImmediate(callback, undefined, true);
367
+ }
368
+ });
369
+ },
370
+
371
+ /**
372
+ * Adds a local directory and all its nested files and directories to the archive
373
+ *
374
+ * @param {string} localPath - local path to the folder
375
+ * @param {string} [zipPath] - optional path inside zip
376
+ * @param {(RegExp|function)} [filter] - optional RegExp or Function if files match will be included.
377
+ */
378
+ addLocalFolder: function (localPath, zipPath, filter) {
379
+ // Prepare filter
380
+ filter = filenameFilter(filter);
381
+
382
+ // fix ZipPath
383
+ zipPath = zipPath ? fixPath(zipPath) : "";
384
+
385
+ // normalize the path first
386
+ localPath = pth.normalize(localPath);
387
+
388
+ if (filetools.fs.existsSync(localPath)) {
389
+ const items = filetools.findFiles(localPath);
390
+ const self = this;
391
+
392
+ if (items.length) {
393
+ for (const filepath of items) {
394
+ const p = pth.join(zipPath, relativePath(localPath, filepath));
395
+ if (filter(p)) {
396
+ self.addLocalFile(filepath, pth.dirname(p));
397
+ }
398
+ }
399
+ }
400
+ } else {
401
+ throw Utils.Errors.FILE_NOT_FOUND(localPath);
402
+ }
403
+ },
404
+
405
+ /**
406
+ * Asynchronous addLocalFolder
407
+ * @param {string} localPath
408
+ * @param {callback} callback
409
+ * @param {string} [zipPath] optional path inside zip
410
+ * @param {RegExp|function} [filter] optional RegExp or Function if files match will
411
+ * be included.
412
+ */
413
+ addLocalFolderAsync: function (localPath, callback, zipPath, filter) {
414
+ // Prepare filter
415
+ filter = filenameFilter(filter);
416
+
417
+ // fix ZipPath
418
+ zipPath = zipPath ? fixPath(zipPath) : "";
419
+
420
+ // normalize the path first
421
+ localPath = pth.normalize(localPath);
422
+
423
+ var self = this;
424
+ filetools.fs.open(localPath, "r", function (err) {
425
+ if (err && err.code === "ENOENT") {
426
+ callback(undefined, Utils.Errors.FILE_NOT_FOUND(localPath));
427
+ } else if (err) {
428
+ callback(undefined, err);
429
+ } else {
430
+ var items = filetools.findFiles(localPath);
431
+ var i = -1;
432
+
433
+ var next = function () {
434
+ i += 1;
435
+ if (i < items.length) {
436
+ var filepath = items[i];
437
+ var p = relativePath(localPath, filepath).split("\\").join("/"); //windows fix
438
+ p = p
439
+ .normalize("NFD")
440
+ .replace(/[\u0300-\u036f]/g, "")
441
+ .replace(/[^\x20-\x7E]/g, ""); // accent fix
442
+ if (filter(p)) {
443
+ filetools.fs.stat(filepath, function (er0, stats) {
444
+ if (er0) callback(undefined, er0);
445
+ if (stats.isFile()) {
446
+ filetools.fs.readFile(filepath, function (er1, data) {
447
+ if (er1) {
448
+ callback(undefined, er1);
449
+ } else {
450
+ self.addFile(zipPath + p, data, "", stats);
451
+ next();
452
+ }
453
+ });
454
+ } else {
455
+ self.addFile(zipPath + p + "/", Buffer.alloc(0), "", stats);
456
+ next();
457
+ }
458
+ });
459
+ } else {
460
+ process.nextTick(() => {
461
+ next();
462
+ });
463
+ }
464
+ } else {
465
+ callback(true, undefined);
466
+ }
467
+ };
468
+
469
+ next();
470
+ }
471
+ });
472
+ },
473
+
474
+ /**
475
+ * Adds a local directory and all its nested files and directories to the archive
476
+ *
477
+ * @param {object | string} options - options object, if it is string it us used as localPath.
478
+ * @param {string} options.localPath - Local path to the folder.
479
+ * @param {string} [options.zipPath] - optional path inside zip.
480
+ * @param {RegExp|function} [options.filter] - optional RegExp or Function if files match will be included.
481
+ * @param {function|string} [options.namefix] - optional function to help fix filename
482
+ * @param {doneCallback} callback - The callback that handles the response.
483
+ *
484
+ */
485
+ addLocalFolderAsync2: function (options, callback) {
486
+ const self = this;
487
+ options = typeof options === "object" ? options : { localPath: options };
488
+ localPath = pth.resolve(fixPath(options.localPath));
489
+ let { zipPath, filter, namefix } = options;
490
+
491
+ if (filter instanceof RegExp) {
492
+ filter = (function (rx) {
493
+ return function (filename) {
494
+ return rx.test(filename);
495
+ };
496
+ })(filter);
497
+ } else if ("function" !== typeof filter) {
498
+ filter = function () {
499
+ return true;
500
+ };
501
+ }
502
+
503
+ // fix ZipPath
504
+ zipPath = zipPath ? fixPath(zipPath) : "";
505
+
506
+ // Check Namefix function
507
+ if (namefix == "latin1") {
508
+ namefix = (str) =>
509
+ str
510
+ .normalize("NFD")
511
+ .replace(/[\u0300-\u036f]/g, "")
512
+ .replace(/[^\x20-\x7E]/g, ""); // accent fix (latin1 characers only)
513
+ }
514
+
515
+ if (typeof namefix !== "function") namefix = (str) => str;
516
+
517
+ // internal, create relative path + fix the name
518
+ const relPathFix = (entry) => pth.join(zipPath, namefix(relativePath(localPath, entry)));
519
+ const fileNameFix = (entry) => pth.win32.basename(pth.win32.normalize(namefix(entry)));
520
+
521
+ filetools.fs.open(localPath, "r", function (err) {
522
+ if (err && err.code === "ENOENT") {
523
+ callback(undefined, Utils.Errors.FILE_NOT_FOUND(localPath));
524
+ } else if (err) {
525
+ callback(undefined, err);
526
+ } else {
527
+ filetools.findFilesAsync(localPath, function (err, fileEntries) {
528
+ if (err) return callback(err);
529
+ fileEntries = fileEntries.filter((dir) => filter(relPathFix(dir)));
530
+ if (!fileEntries.length) callback(undefined, false);
531
+
532
+ setImmediate(
533
+ fileEntries.reverse().reduce(function (next, entry) {
534
+ return function (err, done) {
535
+ if (err || done === false) return setImmediate(next, err, false);
536
+
537
+ self.addLocalFileAsync(
538
+ {
539
+ localPath: entry,
540
+ zipPath: pth.dirname(relPathFix(entry)),
541
+ zipName: fileNameFix(entry)
542
+ },
543
+ next
544
+ );
545
+ };
546
+ }, callback)
547
+ );
548
+ });
549
+ }
550
+ });
551
+ },
552
+
553
+ /**
554
+ * Adds a local directory and all its nested files and directories to the archive
555
+ *
556
+ * @param {string} localPath - path where files will be extracted
557
+ * @param {object} props - optional properties
558
+ * @param {string} [props.zipPath] - optional path inside zip
559
+ * @param {RegExp|function} [props.filter] - optional RegExp or Function if files match will be included.
560
+ * @param {function|string} [props.namefix] - optional function to help fix filename
561
+ */
562
+ addLocalFolderPromise: function (localPath, props) {
563
+ return new Promise((resolve, reject) => {
564
+ this.addLocalFolderAsync2(Object.assign({ localPath }, props), (err, done) => {
565
+ if (err) reject(err);
566
+ if (done) resolve(this);
567
+ });
568
+ });
569
+ },
570
+
571
+ /**
572
+ * Allows you to create a entry (file or directory) in the zip file.
573
+ * If you want to create a directory the entryName must end in / and a null buffer should be provided.
574
+ * Comment and attributes are optional
575
+ *
576
+ * @param {string} entryName
577
+ * @param {Buffer | string} content - file content as buffer or utf8 coded string
578
+ * @param {string} [comment] - file comment
579
+ * @param {number | object} [attr] - number as unix file permissions, object as filesystem Stats object
580
+ */
581
+ addFile: function (entryName, content, comment, attr) {
582
+ entryName = zipnamefix(entryName);
583
+ let entry = getEntry(entryName);
584
+ const update = entry != null;
585
+
586
+ // prepare new entry
587
+ if (!update) {
588
+ entry = new ZipEntry(opts);
589
+ entry.entryName = entryName;
590
+ }
591
+ entry.comment = comment || "";
592
+
593
+ const isStat = "object" === typeof attr && attr instanceof filetools.fs.Stats;
594
+
595
+ // last modification time from file stats
596
+ if (isStat) {
597
+ entry.header.time = attr.mtime;
598
+ }
599
+
600
+ // Set file attribute
601
+ var fileattr = entry.isDirectory ? 0x10 : 0; // (MS-DOS directory flag)
602
+
603
+ // extended attributes field for Unix
604
+ // set file type either S_IFDIR / S_IFREG
605
+ let unix = entry.isDirectory ? 0x4000 : 0x8000;
606
+
607
+ if (isStat) {
608
+ // File attributes from file stats
609
+ unix |= 0xfff & attr.mode;
610
+ } else if ("number" === typeof attr) {
611
+ // attr from given attr values
612
+ unix |= 0xfff & attr;
613
+ } else {
614
+ // Default values:
615
+ unix |= entry.isDirectory ? 0o755 : 0o644; // permissions (drwxr-xr-x) or (-r-wr--r--)
616
+ }
617
+
618
+ fileattr = (fileattr | (unix << 16)) >>> 0; // add attributes
619
+
620
+ entry.attr = fileattr;
621
+
622
+ entry.setData(content);
623
+ if (!update) _zip.setEntry(entry);
624
+
625
+ return entry;
626
+ },
627
+
628
+ /**
629
+ * Returns an array of ZipEntry objects representing the files and folders inside the archive
630
+ *
631
+ * @param {string} [password]
632
+ * @returns Array
633
+ */
634
+ getEntries: function (password) {
635
+ _zip.password = password;
636
+ return _zip ? _zip.entries : [];
637
+ },
638
+
639
+ /**
640
+ * Returns a ZipEntry object representing the file or folder specified by ``name``.
641
+ *
642
+ * @param {string} name
643
+ * @return ZipEntry
644
+ */
645
+ getEntry: function (/**String*/ name) {
646
+ return getEntry(name);
647
+ },
648
+
649
+ getEntryCount: function () {
650
+ return _zip.getEntryCount();
651
+ },
652
+
653
+ forEach: function (callback) {
654
+ return _zip.forEach(callback);
655
+ },
656
+
657
+ /**
658
+ * Extracts the given entry to the given targetPath
659
+ * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted
660
+ *
661
+ * @param {string|ZipEntry} entry - ZipEntry object or String with the full path of the entry
662
+ * @param {string} targetPath - Target folder where to write the file
663
+ * @param {boolean} [maintainEntryPath=true] - If maintainEntryPath is true and the entry is inside a folder, the entry folder will be created in targetPath as well. Default is TRUE
664
+ * @param {boolean} [overwrite=false] - If the file already exists at the target path, the file will be overwriten if this is true.
665
+ * @param {boolean} [keepOriginalPermission=false] - The file will be set as the permission from the entry if this is true.
666
+ * @param {string} [outFileName] - String If set will override the filename of the extracted file (Only works if the entry is a file)
667
+ *
668
+ * @return Boolean
669
+ */
670
+ extractEntryTo: function (entry, targetPath, maintainEntryPath, overwrite, keepOriginalPermission, outFileName) {
671
+ overwrite = get_Bool(false, overwrite);
672
+ keepOriginalPermission = get_Bool(false, keepOriginalPermission);
673
+ maintainEntryPath = get_Bool(true, maintainEntryPath);
674
+ outFileName = get_Str(keepOriginalPermission, outFileName);
675
+
676
+ var item = getEntry(entry);
677
+ if (!item) {
678
+ throw Utils.Errors.NO_ENTRY();
679
+ }
680
+
681
+ var entryName = canonical(item.entryName);
682
+
683
+ var target = sanitize(targetPath, outFileName && !item.isDirectory ? outFileName : maintainEntryPath ? entryName : pth.basename(entryName));
684
+
685
+ if (item.isDirectory) {
686
+ var children = _zip.getEntryChildren(item);
687
+ children.forEach(function (child) {
688
+ if (child.isDirectory) return;
689
+ var content = child.getData();
690
+ if (!content) {
691
+ throw Utils.Errors.CANT_EXTRACT_FILE();
692
+ }
693
+ var name = canonical(child.entryName);
694
+ var childName = sanitize(targetPath, maintainEntryPath ? name : pth.basename(name));
695
+ // The reverse operation for attr depend on method addFile()
696
+ const fileAttr = keepOriginalPermission ? child.header.fileAttr : undefined;
697
+ filetools.writeFileTo(childName, content, overwrite, fileAttr);
698
+ });
699
+ return true;
700
+ }
701
+
702
+ var content = item.getData(_zip.password);
703
+ if (!content) throw Utils.Errors.CANT_EXTRACT_FILE();
704
+
705
+ if (filetools.fs.existsSync(target) && !overwrite) {
706
+ throw Utils.Errors.CANT_OVERRIDE();
707
+ }
708
+ // The reverse operation for attr depend on method addFile()
709
+ const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
710
+ filetools.writeFileTo(target, content, overwrite, fileAttr);
711
+
712
+ return true;
713
+ },
714
+
715
+ /**
716
+ * Test the archive
717
+ * @param {string} [pass]
718
+ */
719
+ test: function (pass) {
720
+ if (!_zip) {
721
+ return false;
722
+ }
723
+
724
+ for (var entry in _zip.entries) {
725
+ try {
726
+ if (entry.isDirectory) {
727
+ continue;
728
+ }
729
+ var content = _zip.entries[entry].getData(pass);
730
+ if (!content) {
731
+ return false;
732
+ }
733
+ } catch (err) {
734
+ return false;
735
+ }
736
+ }
737
+ return true;
738
+ },
739
+
740
+ /**
741
+ * Extracts the entire archive to the given location
742
+ *
743
+ * @param {string} targetPath Target location
744
+ * @param {boolean} [overwrite=false] If the file already exists at the target path, the file will be overwriten if this is true.
745
+ * Default is FALSE
746
+ * @param {boolean} [keepOriginalPermission=false] The file will be set as the permission from the entry if this is true.
747
+ * Default is FALSE
748
+ * @param {string|Buffer} [pass] password
749
+ */
750
+ extractAllTo: function (targetPath, overwrite, keepOriginalPermission, pass) {
751
+ keepOriginalPermission = get_Bool(false, keepOriginalPermission);
752
+ pass = get_Str(keepOriginalPermission, pass);
753
+ overwrite = get_Bool(false, overwrite);
754
+ if (!_zip) throw Utils.Errors.NO_ZIP();
755
+
756
+ _zip.entries.forEach(function (entry) {
757
+ var entryName = sanitize(targetPath, canonical(entry.entryName));
758
+ if (entry.isDirectory) {
759
+ filetools.makeDir(entryName);
760
+ return;
761
+ }
762
+ var content = entry.getData(pass);
763
+ if (!content) {
764
+ throw Utils.Errors.CANT_EXTRACT_FILE();
765
+ }
766
+ // The reverse operation for attr depend on method addFile()
767
+ const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
768
+ filetools.writeFileTo(entryName, content, overwrite, fileAttr);
769
+ try {
770
+ filetools.fs.utimesSync(entryName, entry.header.time, entry.header.time);
771
+ } catch (err) {
772
+ throw Utils.Errors.CANT_EXTRACT_FILE();
773
+ }
774
+ });
775
+ },
776
+
777
+ /**
778
+ * Asynchronous extractAllTo
779
+ *
780
+ * @param {string} targetPath Target location
781
+ * @param {boolean} [overwrite=false] If the file already exists at the target path, the file will be overwriten if this is true.
782
+ * Default is FALSE
783
+ * @param {boolean} [keepOriginalPermission=false] The file will be set as the permission from the entry if this is true.
784
+ * Default is FALSE
785
+ * @param {function} callback The callback will be executed when all entries are extracted successfully or any error is thrown.
786
+ */
787
+ extractAllToAsync: function (targetPath, overwrite, keepOriginalPermission, callback) {
788
+ callback = get_Fun(overwrite, keepOriginalPermission, callback);
789
+ keepOriginalPermission = get_Bool(false, keepOriginalPermission);
790
+ overwrite = get_Bool(false, overwrite);
791
+ if (!callback) {
792
+ return new Promise((resolve, reject) => {
793
+ this.extractAllToAsync(targetPath, overwrite, keepOriginalPermission, function (err) {
794
+ if (err) {
795
+ reject(err);
796
+ } else {
797
+ resolve(this);
798
+ }
799
+ });
800
+ });
801
+ }
802
+ if (!_zip) {
803
+ callback(Utils.Errors.NO_ZIP());
804
+ return;
805
+ }
806
+
807
+ targetPath = pth.resolve(targetPath);
808
+ // convert entryName to
809
+ const getPath = (entry) => sanitize(targetPath, pth.normalize(canonical(entry.entryName)));
810
+ const getError = (msg, file) => new Error(msg + ': "' + file + '"');
811
+
812
+ // separate directories from files
813
+ const dirEntries = [];
814
+ const fileEntries = [];
815
+ _zip.entries.forEach((e) => {
816
+ if (e.isDirectory) {
817
+ dirEntries.push(e);
818
+ } else {
819
+ fileEntries.push(e);
820
+ }
821
+ });
822
+
823
+ // Create directory entries first synchronously
824
+ // this prevents race condition and assures folders are there before writing files
825
+ for (const entry of dirEntries) {
826
+ const dirPath = getPath(entry);
827
+ // The reverse operation for attr depend on method addFile()
828
+ const dirAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
829
+ try {
830
+ filetools.makeDir(dirPath);
831
+ if (dirAttr) filetools.fs.chmodSync(dirPath, dirAttr);
832
+ // in unix timestamp will change if files are later added to folder, but still
833
+ filetools.fs.utimesSync(dirPath, entry.header.time, entry.header.time);
834
+ } catch (er) {
835
+ callback(getError("Unable to create folder", dirPath));
836
+ }
837
+ }
838
+
839
+ fileEntries.reverse().reduce(function (next, entry) {
840
+ return function (err) {
841
+ if (err) {
842
+ next(err);
843
+ } else {
844
+ const entryName = pth.normalize(canonical(entry.entryName));
845
+ const filePath = sanitize(targetPath, entryName);
846
+ entry.getDataAsync(function (content, err_1) {
847
+ if (err_1) {
848
+ next(err_1);
849
+ } else if (!content) {
850
+ next(Utils.Errors.CANT_EXTRACT_FILE());
851
+ } else {
852
+ // The reverse operation for attr depend on method addFile()
853
+ const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
854
+ filetools.writeFileToAsync(filePath, content, overwrite, fileAttr, function (succ) {
855
+ if (!succ) {
856
+ next(getError("Unable to write file", filePath));
857
+ }
858
+ filetools.fs.utimes(filePath, entry.header.time, entry.header.time, function (err_2) {
859
+ if (err_2) {
860
+ next(getError("Unable to set times", filePath));
861
+ } else {
862
+ next();
863
+ }
864
+ });
865
+ });
866
+ }
867
+ });
868
+ }
869
+ };
870
+ }, callback)();
871
+ },
872
+
873
+ /**
874
+ * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip
875
+ *
876
+ * @param {string} targetFileName
877
+ * @param {function} callback
878
+ */
879
+ writeZip: function (targetFileName, callback) {
880
+ if (arguments.length === 1) {
881
+ if (typeof targetFileName === "function") {
882
+ callback = targetFileName;
883
+ targetFileName = "";
884
+ }
885
+ }
886
+
887
+ if (!targetFileName && opts.filename) {
888
+ targetFileName = opts.filename;
889
+ }
890
+ if (!targetFileName) return;
891
+
892
+ var zipData = _zip.compressToBuffer();
893
+ if (zipData) {
894
+ var ok = filetools.writeFileTo(targetFileName, zipData, true);
895
+ if (typeof callback === "function") callback(!ok ? new Error("failed") : null, "");
896
+ }
897
+ },
898
+
899
+ /**
900
+ *
901
+ * @param {string} targetFileName
902
+ * @param {object} [props]
903
+ * @param {boolean} [props.overwrite=true] If the file already exists at the target path, the file will be overwriten if this is true.
904
+ * @param {boolean} [props.perm] The file will be set as the permission from the entry if this is true.
905
+
906
+ * @returns {Promise<void>}
907
+ */
908
+ writeZipPromise: function (/**String*/ targetFileName, /* object */ props) {
909
+ const { overwrite, perm } = Object.assign({ overwrite: true }, props);
910
+
911
+ return new Promise((resolve, reject) => {
912
+ // find file name
913
+ if (!targetFileName && opts.filename) targetFileName = opts.filename;
914
+ if (!targetFileName) reject("ADM-ZIP: ZIP File Name Missing");
915
+
916
+ this.toBufferPromise().then((zipData) => {
917
+ const ret = (done) => (done ? resolve(done) : reject("ADM-ZIP: Wasn't able to write zip file"));
918
+ filetools.writeFileToAsync(targetFileName, zipData, overwrite, perm, ret);
919
+ }, reject);
920
+ });
921
+ },
922
+
923
+ /**
924
+ * @returns {Promise<Buffer>} A promise to the Buffer.
925
+ */
926
+ toBufferPromise: function () {
927
+ return new Promise((resolve, reject) => {
928
+ _zip.toAsyncBuffer(resolve, reject);
929
+ });
930
+ },
931
+
932
+ /**
933
+ * Returns the content of the entire zip file as a Buffer object
934
+ *
935
+ * @prop {function} [onSuccess]
936
+ * @prop {function} [onFail]
937
+ * @prop {function} [onItemStart]
938
+ * @prop {function} [onItemEnd]
939
+ * @returns {Buffer}
940
+ */
941
+ toBuffer: function (onSuccess, onFail, onItemStart, onItemEnd) {
942
+ if (typeof onSuccess === "function") {
943
+ _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);
944
+ return null;
945
+ }
946
+ return _zip.compressToBuffer();
947
+ }
948
+ };
949
+ };