nolo-cli 0.143.0-alpha.1 → 0.145.0-alpha.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 (455) hide show
  1. package/README.md +2 -0
  2. package/{_executeModel-QK43QR2R.js → _executeModel-M3FASQ2Z.js} +18 -17
  3. package/{agentDeleteCommand-SE4WUIRR.js → agentDeleteCommand-K7GCEEVS.js} +10 -9
  4. package/{agentEmailCommands-LW5JMYH2.js → agentEmailCommands-MNXRO36L.js} +24 -23
  5. package/{agentListCommands-LGZG2OQR.js → agentListCommands-KMZR6VVM.js} +12 -11
  6. package/{agentMachineCommands-BNOXYSPZ.js → agentMachineCommands-75TIBYDY.js} +10 -9
  7. package/{agentProviderCommands-AOG3OZJA.js → agentProviderCommands-TWB6E5WD.js} +1 -1
  8. package/{agentRecordCommands-W5ZXPHZV.js → agentRecordCommands-RDO5L3N4.js} +23 -22
  9. package/{agentRunCommand-VRLCL57M.js → agentRunCommand-FVJJPL27.js} +23 -22
  10. package/{agentRuntimeLocal-VOQ3UYZB.js → agentRuntimeLocal-DAK7RCER.js} +8 -7
  11. package/{agentSlice-4AK24F5F.js → agentSlice-6MRJR2BJ.js} +1 -1
  12. package/{appDeleteCommands-XWAIUHTN.js → appDeleteCommands-JMMXK3XT.js} +11 -10
  13. package/{appDeployCommands-CBJJCUMG.js → appDeployCommands-JFU6GALI.js} +11 -10
  14. package/{appDeployStatusCommands-LTTZTJQS.js → appDeployStatusCommands-AXTZ4GAN.js} +11 -10
  15. package/{appGetCommands-QHUB7MFF.js → appGetCommands-CR2W3DCM.js} +11 -10
  16. package/{appListCommands-HINIDJE7.js → appListCommands-2TV6P3EU.js} +11 -10
  17. package/{authCommand-LARLQ3GC.js → authCommand-UBJ4EWYZ.js} +6 -6
  18. package/{authCommands-GBIFZWD3.js → authCommands-H6WKKCRW.js} +1 -1
  19. package/{builtinSkillRegistry-AFPSTTAU.js → builtinSkillRegistry-ZMF6YGNO.js} +4 -3
  20. package/{chatQueueReduxAdapter-KIQ3FQ62.js → chatQueueReduxAdapter-CDOHVTSE.js} +2 -2
  21. package/{chromeCommands-NKU3OWKH.js → chromeCommands-2N6MEWRU.js} +94 -23
  22. package/{chromeOpsCommands-OQDJGD4Y.js → chromeOpsCommands-IXRLN57H.js} +4 -3
  23. package/{chunk-7MUSNQ6E.js → chunk-27ONFIEY.js} +20 -2
  24. package/{chunk-OZ6V53WV.js → chunk-2EE5UD3N.js} +1 -1
  25. package/{chunk-44QZPYLI.js → chunk-2SYTUTLI.js} +92 -20
  26. package/{chunk-DID5AVGT.js → chunk-2TKVOEQF.js} +11 -10
  27. package/chunk-5J3PYNUP.js +255 -0
  28. package/{chunk-OUOJE2P2.js → chunk-5XYFIDFU.js} +5 -5
  29. package/{chunk-WTUVMKSQ.js → chunk-62XHRZG4.js} +2 -2
  30. package/{chunk-WC6A2Q7S.js → chunk-6TPOEJMQ.js} +5 -2
  31. package/{chunk-RRMAZ2BI.js → chunk-7NANRWL4.js} +1 -1
  32. package/{chunk-44F6KKUE.js → chunk-7YAK46ML.js} +3 -3
  33. package/{chunk-NOGH7HCP.js → chunk-A6FNUMCF.js} +47 -6
  34. package/{chunk-OFYHCA6W.js → chunk-AATZZAZE.js} +1 -1
  35. package/{chunk-KUPDS66Q.js → chunk-ANX7Z7Z2.js} +8 -8
  36. package/{chunk-J5H6SUOW.js → chunk-B2XUQXQX.js} +2 -2
  37. package/{chunk-A5MB5RIT.js → chunk-CCOXTK3I.js} +1 -1
  38. package/chunk-GNMAFAIS.js +29 -0
  39. package/{chunk-GZQNKKDG.js → chunk-HKBFZONG.js} +1 -1
  40. package/{chunk-7LLWEG6F.js → chunk-I44MDY73.js} +3 -3
  41. package/{chunk-QDT5T7MK.js → chunk-I4OPU5TK.js} +1 -1
  42. package/{chunk-VPFEPRME.js → chunk-IVZJWTDI.js} +3 -0
  43. package/{chunk-CTGZO35O.js → chunk-JLQKV2ZJ.js} +2 -2
  44. package/{chunk-PQVOC2CZ.js → chunk-M2YBIBBS.js} +1 -1
  45. package/{chunk-ZOI6KA4N.js → chunk-M76SRQ3H.js} +34 -22
  46. package/{chunk-K25DK52L.js → chunk-OKSJZ4UU.js} +21 -223
  47. package/{chunk-U5QTKTZE.js → chunk-P6GMCCAT.js} +1 -1
  48. package/{chunk-L6RB42ZR.js → chunk-QFZM5BFI.js} +3 -3
  49. package/{chunk-GH4MH73K.js → chunk-RHDOQWXZ.js} +175 -17
  50. package/{chunk-M6NK74VP.js → chunk-S5XGT6GB.js} +1 -1
  51. package/{chunk-KUWT3C2P.js → chunk-T76D3OYX.js} +1 -1
  52. package/{chunk-MXRUAINC.js → chunk-UMB7CHAY.js} +3 -3
  53. package/{chunk-VVUSRF5D.js → chunk-VJ4FUWPC.js} +3 -3
  54. package/{chunk-T36EFAW7.js → chunk-VZVTPDPL.js} +3 -3
  55. package/{chunk-AAROOKLX.js → chunk-X2QRZXZH.js} +1 -1
  56. package/{chunk-WYYO2YOL.js → chunk-XNXNHAAP.js} +1 -1
  57. package/{chunk-O6OSWFZQ.js → chunk-XUWRURDF.js} +6 -0
  58. package/{chunk-DOBBRISY.js → chunk-Y6XHJ4JJ.js} +22 -10
  59. package/{chunk-W247GBSQ.js → chunk-YU2THNST.js} +1 -1
  60. package/{chunk-OY5IJI2N.js → chunk-YUNJN43V.js} +23 -3
  61. package/{commandRegistry-DETYXF5I.js → commandRegistry-ZF6YXQWV.js} +76 -65
  62. package/{contentThunks-6QBTPLWT.js → contentThunks-6Y6ATG3A.js} +3 -3
  63. package/{createAgentAutomationAction-TZVIJTZ7.js → createAgentAutomationAction-OQTLA2FC.js} +3 -3
  64. package/{createDialogAction-KTDAEA42.js → createDialogAction-IF5EZMBD.js} +6 -5
  65. package/{createPageAction-4RASVDAU.js → createPageAction-GU766R3L.js} +3 -3
  66. package/{dialogCommands-GY7LRERG.js → dialogCommands-QV7XAX2V.js} +11 -10
  67. package/{dialogSlice-J24APUGG.js → dialogSlice-CVHMDSVV.js} +2 -2
  68. package/{docCreateCommands-T7KII3WP.js → docCreateCommands-FSBANQTO.js} +10 -9
  69. package/{docDeleteCommands-SQ26EFE6.js → docDeleteCommands-4IR4YSGU.js} +11 -10
  70. package/{docReadCommands-I6NA2ZKV.js → docReadCommands-4EYPGUE3.js} +10 -9
  71. package/{docStore-SPOGE7K3.js → docStore-RQOWPNON.js} +1 -1
  72. package/{docUpdateCommands-IG43SZ6U.js → docUpdateCommands-RW2BYLSE.js} +10 -9
  73. package/{handleSendMessageAction-I2IN64DS.js → handleSendMessageAction-UDTPG5WK.js} +4 -3
  74. package/index.js +4 -4
  75. package/{machineCommands-U7VABJPW.js → machineCommands-WBQ4TCPD.js} +22 -21
  76. package/{machineWsRunDispatch-ZNU6LRNG.js → machineWsRunDispatch-7DNDXUOS.js} +22 -21
  77. package/node_modules/abstract-level/CHANGELOG.md +150 -0
  78. package/node_modules/abstract-level/LICENSE +21 -0
  79. package/node_modules/abstract-level/README.md +1957 -0
  80. package/node_modules/abstract-level/UPGRADING.md +669 -0
  81. package/node_modules/abstract-level/abstract-chained-batch.js +397 -0
  82. package/node_modules/abstract-level/abstract-iterator.js +404 -0
  83. package/node_modules/abstract-level/abstract-level.js +1127 -0
  84. package/node_modules/abstract-level/abstract-snapshot.js +84 -0
  85. package/node_modules/abstract-level/index.d.ts +52 -0
  86. package/node_modules/abstract-level/index.js +9 -0
  87. package/node_modules/abstract-level/lib/abstract-sublevel-iterator.js +141 -0
  88. package/node_modules/abstract-level/lib/abstract-sublevel.js +290 -0
  89. package/node_modules/abstract-level/lib/common.js +33 -0
  90. package/node_modules/abstract-level/lib/default-chained-batch.js +29 -0
  91. package/node_modules/abstract-level/lib/default-kv-iterator.js +74 -0
  92. package/node_modules/abstract-level/lib/deferred-iterator.js +110 -0
  93. package/node_modules/abstract-level/lib/deferred-queue.js +84 -0
  94. package/node_modules/abstract-level/lib/errors.js +21 -0
  95. package/node_modules/abstract-level/lib/event-monitor.js +30 -0
  96. package/node_modules/abstract-level/lib/hooks.js +78 -0
  97. package/node_modules/abstract-level/lib/prefixes.js +21 -0
  98. package/node_modules/abstract-level/lib/prewrite-batch.js +96 -0
  99. package/node_modules/abstract-level/lib/range-options.js +26 -0
  100. package/node_modules/abstract-level/package.json +66 -0
  101. package/node_modules/abstract-level/test/async-iterator-test.js +132 -0
  102. package/node_modules/abstract-level/test/batch-test.js +214 -0
  103. package/node_modules/abstract-level/test/chained-batch-test.js +315 -0
  104. package/node_modules/abstract-level/test/clear-range-test.js +262 -0
  105. package/node_modules/abstract-level/test/clear-test.js +110 -0
  106. package/node_modules/abstract-level/test/common.js +90 -0
  107. package/node_modules/abstract-level/test/deferred-open-test.js +209 -0
  108. package/node_modules/abstract-level/test/del-test.js +65 -0
  109. package/node_modules/abstract-level/test/encoding-buffer-test.js +336 -0
  110. package/node_modules/abstract-level/test/encoding-custom-test.js +92 -0
  111. package/node_modules/abstract-level/test/encoding-decode-error-test.js +85 -0
  112. package/node_modules/abstract-level/test/encoding-json-test.js +75 -0
  113. package/node_modules/abstract-level/test/encoding-test.js +130 -0
  114. package/node_modules/abstract-level/test/events/write.js +132 -0
  115. package/node_modules/abstract-level/test/factory-test.js +36 -0
  116. package/node_modules/abstract-level/test/get-many-test.js +157 -0
  117. package/node_modules/abstract-level/test/get-sync-test.js +61 -0
  118. package/node_modules/abstract-level/test/get-test.js +83 -0
  119. package/node_modules/abstract-level/test/has-many-test.js +144 -0
  120. package/node_modules/abstract-level/test/has-test.js +81 -0
  121. package/node_modules/abstract-level/test/hooks/newsub.js +57 -0
  122. package/node_modules/abstract-level/test/hooks/postopen.js +229 -0
  123. package/node_modules/abstract-level/test/hooks/prewrite.js +816 -0
  124. package/node_modules/abstract-level/test/hooks/shared.js +38 -0
  125. package/node_modules/abstract-level/test/index.js +86 -0
  126. package/node_modules/abstract-level/test/iterator-explicit-snapshot-test.js +393 -0
  127. package/node_modules/abstract-level/test/iterator-no-snapshot-test.js +49 -0
  128. package/node_modules/abstract-level/test/iterator-range-test.js +277 -0
  129. package/node_modules/abstract-level/test/iterator-seek-test.js +335 -0
  130. package/node_modules/abstract-level/test/iterator-snapshot-test.js +56 -0
  131. package/node_modules/abstract-level/test/iterator-test.js +621 -0
  132. package/node_modules/abstract-level/test/manifest-test.js +21 -0
  133. package/node_modules/abstract-level/test/open-create-if-missing-test.js +39 -0
  134. package/node_modules/abstract-level/test/open-error-if-exists-test.js +25 -0
  135. package/node_modules/abstract-level/test/open-test.js +263 -0
  136. package/node_modules/abstract-level/test/put-get-del-test.js +97 -0
  137. package/node_modules/abstract-level/test/put-test.js +70 -0
  138. package/node_modules/abstract-level/test/self/abstract-iterator-test.js +182 -0
  139. package/node_modules/abstract-level/test/self/async-iterator-test.js +242 -0
  140. package/node_modules/abstract-level/test/self/attach-resource-test.js +74 -0
  141. package/node_modules/abstract-level/test/self/defer-test.js +140 -0
  142. package/node_modules/abstract-level/test/self/deferred-iterator-test.js +314 -0
  143. package/node_modules/abstract-level/test/self/deferred-operations-test.js +86 -0
  144. package/node_modules/abstract-level/test/self/deferred-queue-test.js +93 -0
  145. package/node_modules/abstract-level/test/self/encoding-test.js +391 -0
  146. package/node_modules/abstract-level/test/self/errors-test.js +11 -0
  147. package/node_modules/abstract-level/test/self/iterator-test.js +1050 -0
  148. package/node_modules/abstract-level/test/self/sublevel-test.js +1039 -0
  149. package/node_modules/abstract-level/test/self.js +905 -0
  150. package/node_modules/abstract-level/test/sublevel-test.js +209 -0
  151. package/node_modules/abstract-level/test/traits/closed.js +42 -0
  152. package/node_modules/abstract-level/test/traits/index.js +4 -0
  153. package/node_modules/abstract-level/test/traits/open.js +62 -0
  154. package/node_modules/abstract-level/test/util.js +275 -0
  155. package/node_modules/abstract-level/types/abstract-chained-batch.d.ts +124 -0
  156. package/node_modules/abstract-level/types/abstract-iterator.d.ts +241 -0
  157. package/node_modules/abstract-level/types/abstract-level.d.ts +636 -0
  158. package/node_modules/abstract-level/types/abstract-snapshot.d.ts +30 -0
  159. package/node_modules/abstract-level/types/abstract-sublevel.d.ts +76 -0
  160. package/node_modules/abstract-level/types/interfaces.d.ts +43 -0
  161. package/node_modules/base64-js/LICENSE +21 -0
  162. package/node_modules/base64-js/README.md +34 -0
  163. package/node_modules/base64-js/base64js.min.js +1 -0
  164. package/node_modules/base64-js/index.d.ts +3 -0
  165. package/node_modules/base64-js/index.js +150 -0
  166. package/node_modules/base64-js/package.json +47 -0
  167. package/node_modules/browser-level/CHANGELOG.md +44 -0
  168. package/node_modules/browser-level/LICENSE +21 -0
  169. package/node_modules/browser-level/README.md +124 -0
  170. package/node_modules/browser-level/UPGRADING.md +143 -0
  171. package/node_modules/browser-level/index.d.ts +108 -0
  172. package/node_modules/browser-level/index.js +323 -0
  173. package/node_modules/browser-level/iterator.js +239 -0
  174. package/node_modules/browser-level/package.json +48 -0
  175. package/node_modules/browser-level/util/clear.js +38 -0
  176. package/node_modules/browser-level/util/deserialize.js +17 -0
  177. package/node_modules/browser-level/util/key-range.js +20 -0
  178. package/node_modules/buffer/AUTHORS.md +73 -0
  179. package/node_modules/buffer/LICENSE +21 -0
  180. package/node_modules/buffer/README.md +410 -0
  181. package/node_modules/buffer/index.d.ts +194 -0
  182. package/node_modules/buffer/index.js +2106 -0
  183. package/node_modules/buffer/package.json +93 -0
  184. package/node_modules/classic-level/CHANGELOG.md +115 -0
  185. package/node_modules/classic-level/LICENSE +21 -0
  186. package/node_modules/classic-level/README.md +274 -0
  187. package/node_modules/classic-level/UPGRADING.md +131 -0
  188. package/node_modules/classic-level/binding.cc +2652 -0
  189. package/node_modules/classic-level/binding.gyp +71 -0
  190. package/node_modules/classic-level/binding.js +1 -0
  191. package/node_modules/classic-level/chained-batch.js +35 -0
  192. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/LICENSE +27 -0
  193. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/Makefile +424 -0
  194. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/build_detect_platform +256 -0
  195. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/autocompact_test.cc +118 -0
  196. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/builder.cc +88 -0
  197. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/builder.h +34 -0
  198. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/c.cc +595 -0
  199. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/c_test.c +390 -0
  200. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/corruption_test.cc +374 -0
  201. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/db_bench.cc +1020 -0
  202. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/db_impl.cc +1568 -0
  203. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/db_impl.h +212 -0
  204. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/db_iter.cc +317 -0
  205. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/db_iter.h +28 -0
  206. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/db_test.cc +2158 -0
  207. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/dbformat.cc +140 -0
  208. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/dbformat.h +230 -0
  209. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/dbformat_test.cc +112 -0
  210. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/dumpfile.cc +225 -0
  211. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/fault_injection_test.cc +554 -0
  212. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/filename.cc +144 -0
  213. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/filename.h +85 -0
  214. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/filename_test.cc +123 -0
  215. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/leveldbutil.cc +64 -0
  216. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/log_format.h +35 -0
  217. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/log_reader.cc +284 -0
  218. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/log_reader.h +113 -0
  219. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/log_test.cc +591 -0
  220. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/log_writer.cc +112 -0
  221. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/log_writer.h +54 -0
  222. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/memtable.cc +145 -0
  223. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/memtable.h +89 -0
  224. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/recovery_test.cc +324 -0
  225. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/repair.cc +461 -0
  226. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/skiplist.h +384 -0
  227. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/skiplist_test.cc +378 -0
  228. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/snapshot.h +67 -0
  229. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/table_cache.cc +127 -0
  230. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/table_cache.h +61 -0
  231. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/version_edit.cc +266 -0
  232. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/version_edit.h +107 -0
  233. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/version_edit_test.cc +46 -0
  234. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/version_set.cc +1535 -0
  235. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/version_set.h +399 -0
  236. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/version_set_test.cc +179 -0
  237. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/write_batch.cc +147 -0
  238. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/write_batch_internal.h +50 -0
  239. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/write_batch_test.cc +120 -0
  240. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/helpers/memenv/memenv.cc +398 -0
  241. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/helpers/memenv/memenv.h +20 -0
  242. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/helpers/memenv/memenv_test.cc +241 -0
  243. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/c.h +290 -0
  244. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/cache.h +110 -0
  245. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/comparator.h +63 -0
  246. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/db.h +164 -0
  247. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/dumpfile.h +25 -0
  248. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/env.h +351 -0
  249. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/filter_policy.h +70 -0
  250. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/iterator.h +100 -0
  251. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/options.h +213 -0
  252. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/slice.h +109 -0
  253. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/status.h +112 -0
  254. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/table.h +85 -0
  255. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/table_builder.h +92 -0
  256. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/value_sink.h +26 -0
  257. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/write_batch.h +64 -0
  258. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/issues/issue178_test.cc +92 -0
  259. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/issues/issue200_test.cc +59 -0
  260. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/port/atomic_pointer.h +242 -0
  261. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/port/port.h +21 -0
  262. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/port/port_example.h +141 -0
  263. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/port/port_posix.cc +53 -0
  264. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/port/port_posix.h +156 -0
  265. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/port/port_posix_sse.cc +129 -0
  266. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/port/thread_annotations.h +60 -0
  267. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/port/win/stdint.h +24 -0
  268. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/block.cc +268 -0
  269. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/block.h +44 -0
  270. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/block_builder.cc +109 -0
  271. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/block_builder.h +57 -0
  272. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/filter_block.cc +111 -0
  273. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/filter_block.h +68 -0
  274. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/filter_block_test.cc +128 -0
  275. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/format.cc +144 -0
  276. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/format.h +108 -0
  277. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/iterator.cc +67 -0
  278. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/iterator_wrapper.h +66 -0
  279. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/merger.cc +197 -0
  280. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/merger.h +26 -0
  281. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/table.cc +285 -0
  282. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/table_builder.cc +270 -0
  283. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/table_test.cc +876 -0
  284. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/two_level_iterator.cc +182 -0
  285. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/two_level_iterator.h +34 -0
  286. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/arena.cc +68 -0
  287. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/arena.h +68 -0
  288. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/arena_test.cc +68 -0
  289. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/bloom.cc +95 -0
  290. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/bloom_test.cc +162 -0
  291. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/cache.cc +405 -0
  292. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/cache_test.cc +226 -0
  293. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/coding.cc +194 -0
  294. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/coding.h +104 -0
  295. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/coding_test.cc +196 -0
  296. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/comparator.cc +81 -0
  297. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/crc32c.cc +350 -0
  298. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/crc32c.h +45 -0
  299. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/crc32c_test.cc +72 -0
  300. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/env.cc +100 -0
  301. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/env_posix.cc +695 -0
  302. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/env_posix_test.cc +66 -0
  303. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/env_posix_test_helper.h +28 -0
  304. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/env_test.cc +106 -0
  305. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/filter_policy.cc +11 -0
  306. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/hash.cc +52 -0
  307. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/hash.h +19 -0
  308. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/hash_test.cc +54 -0
  309. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/histogram.cc +139 -0
  310. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/histogram.h +42 -0
  311. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/logging.cc +72 -0
  312. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/logging.h +43 -0
  313. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/mutexlock.h +41 -0
  314. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/options.cc +30 -0
  315. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/posix_logger.h +98 -0
  316. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/random.h +64 -0
  317. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/status.cc +75 -0
  318. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/testharness.cc +77 -0
  319. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/testharness.h +138 -0
  320. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/testutil.cc +51 -0
  321. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/testutil.h +63 -0
  322. package/node_modules/classic-level/deps/leveldb/leveldb.gyp +282 -0
  323. package/node_modules/classic-level/deps/leveldb/patches/001-value-sink.patch +164 -0
  324. package/node_modules/classic-level/deps/leveldb/port-libuv/atomic_pointer_win.h +48 -0
  325. package/node_modules/classic-level/deps/leveldb/port-libuv/env_win.cc +692 -0
  326. package/node_modules/classic-level/deps/leveldb/port-libuv/port_uv.cc +36 -0
  327. package/node_modules/classic-level/deps/leveldb/port-libuv/port_uv.h +157 -0
  328. package/node_modules/classic-level/deps/leveldb/port-libuv/port_uv.h.bak +153 -0
  329. package/node_modules/classic-level/deps/leveldb/port-libuv/stdint-msvc2008.h +247 -0
  330. package/node_modules/classic-level/deps/leveldb/port-libuv/uv_condvar.h +45 -0
  331. package/node_modules/classic-level/deps/leveldb/port-libuv/uv_condvar_posix.cc +139 -0
  332. package/node_modules/classic-level/deps/leveldb/port-libuv/win_logger.cc +79 -0
  333. package/node_modules/classic-level/deps/leveldb/port-libuv/win_logger.h +28 -0
  334. package/node_modules/classic-level/deps/snappy/freebsd/config.h +135 -0
  335. package/node_modules/classic-level/deps/snappy/freebsd/snappy-stubs-public.h +100 -0
  336. package/node_modules/classic-level/deps/snappy/linux/config.h +135 -0
  337. package/node_modules/classic-level/deps/snappy/linux/snappy-stubs-public.h +100 -0
  338. package/node_modules/classic-level/deps/snappy/mac/config.h +137 -0
  339. package/node_modules/classic-level/deps/snappy/mac/snappy-stubs-public.h +100 -0
  340. package/node_modules/classic-level/deps/snappy/openbsd/config.h +135 -0
  341. package/node_modules/classic-level/deps/snappy/openbsd/snappy-stubs-public.h +100 -0
  342. package/node_modules/classic-level/deps/snappy/snappy/COPYING +54 -0
  343. package/node_modules/classic-level/deps/snappy/snappy/cmake/SnappyConfig.cmake +1 -0
  344. package/node_modules/classic-level/deps/snappy/snappy/cmake/config.h.in +62 -0
  345. package/node_modules/classic-level/deps/snappy/snappy/snappy-c.cc +90 -0
  346. package/node_modules/classic-level/deps/snappy/snappy/snappy-c.h +138 -0
  347. package/node_modules/classic-level/deps/snappy/snappy/snappy-internal.h +224 -0
  348. package/node_modules/classic-level/deps/snappy/snappy/snappy-sinksource.cc +104 -0
  349. package/node_modules/classic-level/deps/snappy/snappy/snappy-sinksource.h +182 -0
  350. package/node_modules/classic-level/deps/snappy/snappy/snappy-stubs-internal.cc +42 -0
  351. package/node_modules/classic-level/deps/snappy/snappy/snappy-stubs-internal.h +561 -0
  352. package/node_modules/classic-level/deps/snappy/snappy/snappy-stubs-public.h.in +94 -0
  353. package/node_modules/classic-level/deps/snappy/snappy/snappy-test.cc +612 -0
  354. package/node_modules/classic-level/deps/snappy/snappy/snappy-test.h +573 -0
  355. package/node_modules/classic-level/deps/snappy/snappy/snappy.cc +1515 -0
  356. package/node_modules/classic-level/deps/snappy/snappy/snappy.h +203 -0
  357. package/node_modules/classic-level/deps/snappy/snappy/snappy_unittest.cc +1410 -0
  358. package/node_modules/classic-level/deps/snappy/snappy.gyp +119 -0
  359. package/node_modules/classic-level/deps/snappy/solaris/config.h +135 -0
  360. package/node_modules/classic-level/deps/snappy/solaris/snappy-stubs-public.h +100 -0
  361. package/node_modules/classic-level/deps/snappy/win32/config.h +29 -0
  362. package/node_modules/classic-level/deps/snappy/win32/snappy-stubs-public.h +100 -0
  363. package/node_modules/classic-level/index.d.ts +343 -0
  364. package/node_modules/classic-level/index.js +311 -0
  365. package/node_modules/classic-level/iterator.js +122 -0
  366. package/node_modules/classic-level/package.json +70 -0
  367. package/node_modules/classic-level/prebuilds/android-arm/classic-level.armv7.node +0 -0
  368. package/node_modules/classic-level/prebuilds/android-arm64/classic-level.armv8.node +0 -0
  369. package/node_modules/classic-level/prebuilds/darwin-x64+arm64/classic-level.node +0 -0
  370. package/node_modules/classic-level/prebuilds/linux-arm/classic-level.armv6.node +0 -0
  371. package/node_modules/classic-level/prebuilds/linux-arm/classic-level.armv7.node +0 -0
  372. package/node_modules/classic-level/prebuilds/linux-arm64/classic-level.armv8.node +0 -0
  373. package/node_modules/classic-level/prebuilds/linux-x64/classic-level.musl.node +0 -0
  374. package/node_modules/classic-level/prebuilds/linux-x64/classic-level.node +0 -0
  375. package/node_modules/classic-level/prebuilds/win32-ia32/classic-level.node +0 -0
  376. package/node_modules/classic-level/prebuilds/win32-x64/classic-level.node +0 -0
  377. package/node_modules/ieee754/LICENSE +11 -0
  378. package/node_modules/ieee754/README.md +51 -0
  379. package/node_modules/ieee754/index.d.ts +10 -0
  380. package/node_modules/ieee754/index.js +85 -0
  381. package/node_modules/ieee754/package.json +52 -0
  382. package/node_modules/is-buffer/LICENSE +21 -0
  383. package/node_modules/is-buffer/README.md +54 -0
  384. package/node_modules/is-buffer/index.d.ts +2 -0
  385. package/node_modules/is-buffer/index.js +11 -0
  386. package/node_modules/is-buffer/package.json +65 -0
  387. package/node_modules/level/CHANGELOG.md +532 -0
  388. package/node_modules/level/LICENSE +21 -0
  389. package/node_modules/level/README.md +107 -0
  390. package/node_modules/level/UPGRADING.md +413 -0
  391. package/node_modules/level/browser.js +1 -0
  392. package/node_modules/level/index.d.ts +75 -0
  393. package/node_modules/level/index.js +1 -0
  394. package/node_modules/level/package.json +62 -0
  395. package/node_modules/level-supports/CHANGELOG.md +140 -0
  396. package/node_modules/level-supports/LICENSE +21 -0
  397. package/node_modules/level-supports/README.md +276 -0
  398. package/node_modules/level-supports/index.d.ts +137 -0
  399. package/node_modules/level-supports/index.js +26 -0
  400. package/node_modules/level-supports/package.json +46 -0
  401. package/node_modules/level-supports/test/cloneable.js +26 -0
  402. package/node_modules/level-supports/test/index.js +24 -0
  403. package/node_modules/level-supports/test/self.js +86 -0
  404. package/node_modules/level-supports/test/shape.js +23 -0
  405. package/node_modules/level-transcoder/CHANGELOG.md +15 -0
  406. package/node_modules/level-transcoder/LICENSE +21 -0
  407. package/node_modules/level-transcoder/README.md +214 -0
  408. package/node_modules/level-transcoder/UPGRADING.md +13 -0
  409. package/node_modules/level-transcoder/index.d.ts +27 -0
  410. package/node_modules/level-transcoder/index.js +158 -0
  411. package/node_modules/level-transcoder/lib/encoding.d.ts +158 -0
  412. package/node_modules/level-transcoder/lib/encoding.js +105 -0
  413. package/node_modules/level-transcoder/lib/encodings.d.ts +9 -0
  414. package/node_modules/level-transcoder/lib/encodings.js +135 -0
  415. package/node_modules/level-transcoder/lib/formats.d.ts +13 -0
  416. package/node_modules/level-transcoder/lib/formats.js +111 -0
  417. package/node_modules/level-transcoder/lib/text-endec.d.ts +6 -0
  418. package/node_modules/level-transcoder/lib/text-endec.js +19 -0
  419. package/node_modules/level-transcoder/package.json +46 -0
  420. package/node_modules/maybe-combine-errors/LICENSE.md +21 -0
  421. package/node_modules/maybe-combine-errors/README.md +94 -0
  422. package/node_modules/maybe-combine-errors/index.js +60 -0
  423. package/node_modules/maybe-combine-errors/package.json +33 -0
  424. package/node_modules/module-error/CHANGELOG.md +23 -0
  425. package/node_modules/module-error/LICENSE +21 -0
  426. package/node_modules/module-error/README.md +89 -0
  427. package/node_modules/module-error/index.d.ts +18 -0
  428. package/node_modules/module-error/index.js +22 -0
  429. package/node_modules/module-error/package.json +36 -0
  430. package/node_modules/napi-macros/LICENSE +21 -0
  431. package/node_modules/napi-macros/README.md +277 -0
  432. package/node_modules/napi-macros/index.js +1 -0
  433. package/node_modules/napi-macros/napi-macros.h +255 -0
  434. package/node_modules/napi-macros/package.json +22 -0
  435. package/node_modules/node-gyp-build/LICENSE +21 -0
  436. package/node_modules/node-gyp-build/README.md +58 -0
  437. package/node_modules/node-gyp-build/SECURITY.md +5 -0
  438. package/node_modules/node-gyp-build/bin.js +84 -0
  439. package/node_modules/node-gyp-build/build-test.js +19 -0
  440. package/node_modules/node-gyp-build/index.js +6 -0
  441. package/node_modules/node-gyp-build/node-gyp-build.js +207 -0
  442. package/node_modules/node-gyp-build/optional.js +7 -0
  443. package/node_modules/node-gyp-build/package.json +43 -0
  444. package/package.json +6 -3
  445. package/{providerPresetApply-7XEHTODR.js → providerPresetApply-XTEXOH7X.js} +3 -3
  446. package/{providerRegistry-GNV4FFSA.js → providerRegistry-ADYDSLKR.js} +3 -3
  447. package/{readlineWorkspace-46KDFUHN.js → readlineWorkspace-LO6ZLFTO.js} +1381 -1317
  448. package/{runAgentClientLoop-CQWLWU4W.js → runAgentClientLoop-KAYGKVTK.js} +16 -15
  449. package/{runtimeDoctorCommands-3USD722U.js → runtimeDoctorCommands-ID23PNNZ.js} +28 -0
  450. package/{spaceCommands-TSBC5UWP.js → spaceCommands-FA6RCZ2Y.js} +10 -9
  451. package/{streamAgentChatTurn-XD5JEJXA.js → streamAgentChatTurn-DFNDU2UY.js} +17 -16
  452. package/{tools-5NAJJTFN.js → tools-6HKH75NT.js} +13 -12
  453. package/{tuiSummaryLlmCaller-7KLLDP22.js → tuiSummaryLlmCaller-CFFVXQWX.js} +2 -2
  454. package/{updateCommands-XYMGOKF4.js → updateCommands-4EHDLF5J.js} +1 -1
  455. package/{updateDialogTitleAction-IKZPJCRA.js → updateDialogTitleAction-FFSYTLBC.js} +3 -3
@@ -0,0 +1,1039 @@
1
+ 'use strict'
2
+
3
+ const test = require('tape')
4
+ const { Buffer } = require('buffer')
5
+ const { AbstractLevel, AbstractSublevel } = require('../..')
6
+ const { AbstractIterator, AbstractKeyIterator, AbstractValueIterator } = require('../..')
7
+
8
+ class NoopLevel extends AbstractLevel {
9
+ constructor (...args) {
10
+ super(
11
+ { encodings: { utf8: true, buffer: true, view: true } },
12
+ ...args
13
+ )
14
+ }
15
+ }
16
+
17
+ test('sublevel is extensible', function (t) {
18
+ t.plan(6)
19
+
20
+ class MockLevel extends AbstractLevel {
21
+ _sublevel (name, options) {
22
+ t.is(name, 'test')
23
+ t.same(options, { separator: '!', customOption: 123 })
24
+
25
+ return new MockSublevel(this, name, {
26
+ ...options,
27
+ manifest: {
28
+ encodings: { ignored: true },
29
+ additionalMethods: { test: true },
30
+ events: { foo: true }
31
+ }
32
+ })
33
+ }
34
+ }
35
+
36
+ class MockSublevel extends AbstractSublevel {
37
+ test () {
38
+ this.emit('foo')
39
+ }
40
+ }
41
+
42
+ const db = new MockLevel({
43
+ encodings: { utf8: true },
44
+ additionalMethods: { ignored: true },
45
+ events: { ignored: true }
46
+ })
47
+
48
+ const sub = db.sublevel('test', { customOption: 123 })
49
+
50
+ t.is(sub.supports.encodings.ignored, undefined)
51
+ t.same(sub.supports.additionalMethods, { test: true })
52
+ t.same(sub.supports.events, {
53
+ foo: true,
54
+
55
+ // Added by AbstractLevel
56
+ opening: true,
57
+ open: true,
58
+ closing: true,
59
+ closed: true,
60
+ write: true,
61
+ clear: true
62
+ })
63
+
64
+ sub.on('foo', () => t.pass('emitted'))
65
+ sub.test()
66
+ })
67
+
68
+ // NOTE: adapted from subleveldown
69
+ test('sublevel name and options', function (t) {
70
+ t.test('empty name', function (t) {
71
+ const sub = new NoopLevel().sublevel('')
72
+ t.is(sub.prefix, '!!')
73
+ t.same(sub.path(), [''])
74
+ t.end()
75
+ })
76
+
77
+ t.test('name without options', function (t) {
78
+ const sub = new NoopLevel().sublevel('name')
79
+ t.is(sub.prefix, '!name!')
80
+ t.same(sub.path(), ['name'])
81
+ t.end()
82
+ })
83
+
84
+ t.test('name and separator option', function (t) {
85
+ const sub = new NoopLevel().sublevel('name', { separator: '%' })
86
+ t.is(sub.prefix, '%name%')
87
+ t.same(sub.path(), ['name'])
88
+ t.end()
89
+ })
90
+
91
+ t.test('array name', function (t) {
92
+ const sub = new NoopLevel().sublevel(['a', 'b'])
93
+ const alt = new NoopLevel().sublevel('a').sublevel('b')
94
+
95
+ t.is(sub.prefix, '!a!!b!')
96
+ t.same(sub.path(), ['a', 'b'])
97
+ t.same(sub.path(true), ['a', 'b'])
98
+
99
+ t.is(alt.prefix, sub.prefix)
100
+ t.same(alt.path(), ['a', 'b'])
101
+ t.same(alt.path(true), ['b'])
102
+
103
+ t.end()
104
+ })
105
+
106
+ t.test('empty array name', function (t) {
107
+ const sub = new NoopLevel().sublevel(['', ''])
108
+ t.is(sub.prefix, '!!!!')
109
+ const alt = new NoopLevel().sublevel('').sublevel('')
110
+ t.is(alt.prefix, sub.prefix)
111
+ t.end()
112
+ })
113
+
114
+ t.test('array name with single element', function (t) {
115
+ const sub = new NoopLevel().sublevel(['a'])
116
+ t.is(sub.prefix, '!a!')
117
+ t.same(sub.path(), ['a'])
118
+
119
+ const alt = new NoopLevel().sublevel('a')
120
+ t.is(alt.prefix, sub.prefix)
121
+ t.same(sub.path(), alt.path())
122
+
123
+ t.end()
124
+ })
125
+
126
+ t.test('array name and separator option', function (t) {
127
+ const sub = new NoopLevel().sublevel(['a', 'b'], { separator: '%' })
128
+ t.is(sub.prefix, '%a%%b%')
129
+ t.same(sub.path(), ['a', 'b'])
130
+
131
+ const alt = new NoopLevel().sublevel('a', { separator: '%' }).sublevel('b', { separator: '%' })
132
+ t.is(alt.prefix, sub.prefix)
133
+ t.same(alt.path(), ['a', 'b'])
134
+
135
+ t.end()
136
+ })
137
+
138
+ t.test('separator is trimmed from name', function (t) {
139
+ const sub1 = new NoopLevel().sublevel('!name')
140
+ t.is(sub1.prefix, '!name!')
141
+ t.same(sub1.path(), ['name'])
142
+
143
+ const sub2 = new NoopLevel().sublevel('name!')
144
+ t.is(sub2.prefix, '!name!')
145
+ t.same(sub2.path(), ['name'])
146
+
147
+ const sub3 = new NoopLevel().sublevel('!!name!!')
148
+ t.is(sub3.prefix, '!name!')
149
+ t.same(sub3.path(), ['name'])
150
+
151
+ const sub4 = new NoopLevel().sublevel('@name@', { separator: '@' })
152
+ t.is(sub4.prefix, '@name@')
153
+ t.same(sub4.path(), ['name'])
154
+
155
+ const sub5 = new NoopLevel().sublevel(['!!!a', 'b!!!'])
156
+ t.is(sub5.prefix, '!a!!b!')
157
+ t.same(sub5.path(), ['a', 'b'])
158
+
159
+ const sub6 = new NoopLevel().sublevel(['a@@@', '@@@b'], { separator: '@' })
160
+ t.is(sub6.prefix, '@a@@b@')
161
+ t.same(sub6.path(), ['a', 'b'])
162
+
163
+ t.end()
164
+ })
165
+
166
+ t.test('repeated separator can not result in empty prefix', function (t) {
167
+ const sub1 = new NoopLevel().sublevel('!!!!')
168
+ t.is(sub1.prefix, '!!')
169
+ t.same(sub1.path(), [''])
170
+
171
+ const sub2 = new NoopLevel().sublevel(['!!!!', '!!!!'])
172
+ t.is(sub2.prefix, '!!!!')
173
+ t.same(sub2.path(), ['', ''])
174
+
175
+ t.end()
176
+ })
177
+
178
+ t.test('invalid sublevel prefix', function (t) {
179
+ t.throws(() => new NoopLevel().sublevel('foo\x05'), (err) => err.code === 'LEVEL_INVALID_PREFIX')
180
+ t.throws(() => new NoopLevel().sublevel('foo\xff'), (err) => err.code === 'LEVEL_INVALID_PREFIX')
181
+ t.throws(() => new NoopLevel().sublevel(['ok', 'foo\xff']), (err) => err.code === 'LEVEL_INVALID_PREFIX')
182
+ t.throws(() => new NoopLevel().sublevel('foo!', { separator: '@' }), (err) => err.code === 'LEVEL_INVALID_PREFIX')
183
+ t.throws(() => new NoopLevel().sublevel(['ok', 'foo!'], { separator: '@' }), (err) => err.code === 'LEVEL_INVALID_PREFIX')
184
+ t.end()
185
+ })
186
+
187
+ // See https://github.com/Level/subleveldown/issues/78
188
+ t.test('doubly nested sublevel has correct prefix', async function (t) {
189
+ t.plan(1)
190
+
191
+ const keys = []
192
+ class MockLevel extends AbstractLevel {
193
+ async _put (key, value, options) {
194
+ keys.push(key)
195
+ }
196
+ }
197
+
198
+ const db = new MockLevel({ encodings: { utf8: true } })
199
+ const sub1 = db.sublevel('1')
200
+ const sub2 = sub1.sublevel('2')
201
+ const sub3 = sub2.sublevel('3')
202
+
203
+ await sub1.put('a', 'value')
204
+ await sub2.put('b', 'value')
205
+ await sub3.put('c', 'value')
206
+
207
+ t.same(keys.sort(), [
208
+ '!1!!2!!3!c',
209
+ '!1!!2!b',
210
+ '!1!a'
211
+ ])
212
+ })
213
+
214
+ t.end()
215
+ })
216
+
217
+ test('sublevel.prefixKey()', function (t) {
218
+ const db = new AbstractLevel({ encodings: { utf8: true, buffer: true, view: true } })
219
+ const sub = db.sublevel('test')
220
+ const textEncoder = new TextEncoder()
221
+
222
+ t.same(sub.prefixKey('', 'utf8'), '!test!')
223
+ t.same(sub.prefixKey('a', 'utf8'), '!test!a')
224
+ t.same(sub.prefixKey('', 'utf8', false), '!test!', 'explicitly global')
225
+ t.same(sub.prefixKey('a', 'utf8', false), '!test!a', 'explicitly global')
226
+ t.same(sub.prefixKey('', 'utf8', true), '!test!', 'local')
227
+ t.same(sub.prefixKey('a', 'utf8', true), '!test!a', 'local')
228
+
229
+ t.same(sub.prefixKey(Buffer.from(''), 'buffer'), Buffer.from('!test!'))
230
+ t.same(sub.prefixKey(Buffer.from('a'), 'buffer'), Buffer.from('!test!a'))
231
+
232
+ t.same(sub.prefixKey(textEncoder.encode(''), 'view'), textEncoder.encode('!test!'))
233
+ t.same(sub.prefixKey(textEncoder.encode('a'), 'view'), textEncoder.encode('!test!a'))
234
+
235
+ const nested = sub.sublevel('nested')
236
+ t.same(nested.prefixKey('', 'utf8'), '!test!!nested!')
237
+ t.same(nested.prefixKey('a', 'utf8'), '!test!!nested!a')
238
+ t.same(nested.prefixKey('', 'utf8', false), '!test!!nested!', 'explicitly global')
239
+ t.same(nested.prefixKey('a', 'utf8', false), '!test!!nested!a', 'explicitly global')
240
+ t.same(nested.prefixKey('', 'utf8', true), '!nested!', 'local')
241
+ t.same(nested.prefixKey('a', 'utf8', true), '!nested!a', 'local')
242
+
243
+ t.end()
244
+ })
245
+
246
+ // NOTE: adapted from subleveldown
247
+ test('sublevel manifest and parent db', function (t) {
248
+ t.test('sublevel inherits manifest from parent db', function (t) {
249
+ const parent = new AbstractLevel({
250
+ encodings: { utf8: true },
251
+ explicitSnapshots: true,
252
+ foo: true
253
+ })
254
+ const sub = parent.sublevel('')
255
+ t.is(sub.supports.foo, true, 'AbstractSublevel inherits from parent')
256
+ t.is(sub.supports.explicitSnapshots, true, 'AbstractSublevel inherits from parent')
257
+ t.end()
258
+ })
259
+
260
+ t.test('sublevel does not support additionalMethods', function (t) {
261
+ const parent = new AbstractLevel({
262
+ encodings: { utf8: true },
263
+ additionalMethods: { foo: true }
264
+ })
265
+
266
+ // We're expecting that AbstractSublevel removes the additionalMethod
267
+ // because it can't automatically prefix any key(-like) arguments
268
+ const sub = parent.sublevel('')
269
+ t.same(sub.supports.additionalMethods, {})
270
+ t.same(parent.supports.additionalMethods, { foo: true })
271
+ t.is(typeof sub.foo, 'undefined', 'AbstractSublevel does not expose method')
272
+ t.end()
273
+ })
274
+
275
+ t.test('sublevel.db is set to root db', function (t) {
276
+ const db = new NoopLevel()
277
+ const sub = db.sublevel('test')
278
+ const nested = sub.sublevel('nested')
279
+ t.ok(sub.db === db)
280
+ t.ok(nested.db === db)
281
+ t.end()
282
+ })
283
+
284
+ t.test('sublevel.parent is set to parent db', function (t) {
285
+ const db = new NoopLevel()
286
+ const sub = db.sublevel('test')
287
+ const nested = sub.sublevel('nested')
288
+ t.ok(sub.parent === db)
289
+ t.ok(nested.parent === sub)
290
+ t.end()
291
+ })
292
+
293
+ t.test('root db has a null parent', function (t) {
294
+ const db = new NoopLevel()
295
+ t.is(db.parent, null)
296
+ t.end()
297
+ })
298
+
299
+ t.end()
300
+ })
301
+
302
+ // NOTE: adapted from subleveldown
303
+ test('opening & closing sublevel', function (t) {
304
+ t.test('error from open() does not bubble up to sublevel', function (t) {
305
+ t.plan(5)
306
+
307
+ class MockLevel extends AbstractLevel {
308
+ async _open (opts) {
309
+ throw new Error('test')
310
+ }
311
+ }
312
+
313
+ const db = new MockLevel({ encodings: { buffer: true } })
314
+ const sub = db.sublevel('test')
315
+
316
+ db.open().catch((err) => {
317
+ t.is(err.code, 'LEVEL_DATABASE_NOT_OPEN')
318
+ t.is(err.cause && err.cause.message, 'test')
319
+ })
320
+
321
+ sub.open().catch((err) => {
322
+ t.is(err.code, 'LEVEL_DATABASE_NOT_OPEN')
323
+ t.is(err.cause && err.cause.code, 'LEVEL_DATABASE_NOT_OPEN') // from db
324
+ t.is(err.cause && err.cause.cause, undefined) // but does not have underlying error
325
+ })
326
+ })
327
+
328
+ t.test('cannot create a sublevel on a closed db', async function (t) {
329
+ t.plan(2)
330
+
331
+ const db = new NoopLevel()
332
+ await db.open()
333
+ await db.close()
334
+
335
+ const sub = db.sublevel('test')
336
+
337
+ try {
338
+ await sub.open()
339
+ } catch (err) {
340
+ t.is(err.code, 'LEVEL_DATABASE_NOT_OPEN', 'sublevel not opened')
341
+ t.is(err.message, 'Database failed to open')
342
+ }
343
+
344
+ await db.open()
345
+ await sub.open()
346
+ await db.sublevel('test2').open()
347
+ })
348
+
349
+ t.test('can close db and sublevel once opened', async function (t) {
350
+ const db = new NoopLevel()
351
+ await db.open()
352
+ const sub = db.sublevel('test')
353
+ await sub.open()
354
+ await db.close()
355
+ await sub.close()
356
+ })
357
+
358
+ t.test('sublevel is closed by parent', async function (t) {
359
+ t.plan(4)
360
+
361
+ const db = new NoopLevel()
362
+ await db.open()
363
+ const sub = db.sublevel('test')
364
+
365
+ await db.open()
366
+ await sub.open()
367
+
368
+ const promise = db.close()
369
+
370
+ t.is(db.status, 'closing')
371
+ t.is(sub.status, 'closing')
372
+
373
+ await promise
374
+
375
+ t.is(db.status, 'closed')
376
+ t.is(sub.status, 'closed')
377
+ })
378
+
379
+ t.test('sublevel rejects operations if parent db is closed', async function (t) {
380
+ t.plan(6)
381
+
382
+ const db = new NoopLevel()
383
+ await db.open()
384
+
385
+ const sub = db.sublevel('test')
386
+ const it = sub.iterator()
387
+
388
+ await sub.open()
389
+ await db.close()
390
+
391
+ const promises = [
392
+ sub.put('foo', 'bar').catch(verify),
393
+ sub.get('foo').catch(verify),
394
+ sub.del('foo').catch(verify),
395
+ sub.clear().catch(verify),
396
+ sub.batch([{ type: 'del', key: 'foo' }]).catch(verify),
397
+ it.next().catch(function (err) {
398
+ t.is(err.code, 'LEVEL_ITERATOR_NOT_OPEN')
399
+ return it.close()
400
+ })
401
+ ]
402
+
403
+ await Promise.all(promises)
404
+
405
+ function verify (err) {
406
+ t.is(err.code, 'LEVEL_DATABASE_NOT_OPEN')
407
+ }
408
+ })
409
+
410
+ t.test('close db while sublevel is opening', async function (t) {
411
+ t.plan(7)
412
+
413
+ const db = new NoopLevel()
414
+ await db.open()
415
+ const sub = db.sublevel('test')
416
+
417
+ t.is(db.status, 'open')
418
+ t.is(sub.status, 'opening')
419
+
420
+ const promises = [
421
+ db.close().then(async function () {
422
+ // Ideally it'd be 'closed' but it's still 'opening' at this point.
423
+ // TODO: use a signal to abort the open() to transition to 'closed' faster
424
+ // t.is(sub.status, 'closed')
425
+
426
+ t.is(db.status, 'closed')
427
+
428
+ return sub.get('foo').then(t.fail.bind(t, 'should not succeed'), (err) => {
429
+ t.is(err.code, 'LEVEL_DATABASE_NOT_OPEN')
430
+ t.is(sub.status, 'closed')
431
+ })
432
+ }),
433
+ sub.get('foo').then(t.fail.bind(t, 'should not succeed'), (err) => {
434
+ t.is(err.code, 'LEVEL_DATABASE_NOT_OPEN')
435
+ t.is(sub.status, 'closed')
436
+ })
437
+ ]
438
+
439
+ await Promise.all(promises)
440
+ })
441
+
442
+ t.test('cannot create sublevel while db is closing', async function (t) {
443
+ t.plan(2)
444
+
445
+ const db = new NoopLevel()
446
+ await db.open()
447
+ const promise = db.close()
448
+ const sub = db.sublevel('test')
449
+
450
+ try {
451
+ await sub.open()
452
+ } catch (err) {
453
+ t.is(err.code, 'LEVEL_DATABASE_NOT_OPEN')
454
+ t.is(sub.status, 'closed')
455
+ }
456
+
457
+ return promise
458
+ })
459
+
460
+ t.test('can wrap a sublevel and reopen the wrapped sublevel', async function (t) {
461
+ const db = new NoopLevel()
462
+ const sub1 = db.sublevel('test1')
463
+ const sub2 = sub1.sublevel('test2')
464
+
465
+ await sub2.open()
466
+ verify()
467
+
468
+ // Prefixes should be the same after closing & reopening
469
+ // See https://github.com/Level/subleveldown/issues/78
470
+ await sub2.close()
471
+ await sub2.open()
472
+ verify()
473
+
474
+ function verify () {
475
+ t.is(sub1.prefix, '!test1!', 'sub1 prefix ok')
476
+ t.is(sub2.prefix, '!test1!!test2!', 'sub2 prefix ok')
477
+ t.ok(sub1.db === db, 'root is ok')
478
+ t.ok(sub2.db === db, 'root is ok')
479
+ t.ok(sub1.parent === db, 'parent is ok')
480
+ t.ok(sub2.parent === sub1, 'parent is ok')
481
+ }
482
+ })
483
+
484
+ // Also test default fallback implementations of keys() and values()
485
+ for (const [mode, def] of [['iterator', false], ['keys', false], ['values', false], ['keys', true], ['values', true]]) {
486
+ const Ctor = mode === 'iterator' || def ? AbstractIterator : mode === 'keys' ? AbstractKeyIterator : AbstractValueIterator
487
+ const privateMethod = def ? '_iterator' : '_' + mode
488
+ const publicMethod = mode
489
+
490
+ t.test(`error from sublevel.${mode}() bubbles up (default implementation: ${def})`, async function (t) {
491
+ t.plan(1)
492
+
493
+ class MockLevel extends AbstractLevel {
494
+ [privateMethod] (options) {
495
+ return new MockIterator(this, options)
496
+ }
497
+ }
498
+
499
+ class MockIterator extends Ctor {
500
+ async _next () {
501
+ throw new Error('next() error from parent database')
502
+ }
503
+ }
504
+
505
+ const db = new MockLevel({ encodings: { buffer: true } })
506
+ const sub = db.sublevel('test')
507
+ const it = sub[publicMethod]()
508
+
509
+ try {
510
+ await it.next()
511
+ } catch (err) {
512
+ t.is(err.message, 'next() error from parent database')
513
+ } finally {
514
+ await it.close()
515
+ }
516
+ })
517
+ }
518
+
519
+ t.end()
520
+ })
521
+
522
+ test('sublevel operations are prefixed', function (t) {
523
+ t.test('sublevel.getMany() is prefixed', async function (t) {
524
+ t.plan(2)
525
+
526
+ class MockLevel extends AbstractLevel {
527
+ async _getMany (keys, options) {
528
+ t.same(keys, ['!test!a', '!test!b'])
529
+ t.same(options, { keyEncoding: 'utf8', valueEncoding: 'utf8' })
530
+ return ['1', '2']
531
+ }
532
+ }
533
+
534
+ const db = new MockLevel({ encodings: { utf8: true } })
535
+ const sub = db.sublevel('test')
536
+
537
+ await sub.open()
538
+ await sub.getMany(['a', 'b'])
539
+ })
540
+
541
+ // Also test default fallback implementations of keys() and values()
542
+ for (const [mode, def] of [['iterator', false], ['keys', false], ['values', false], ['keys', true], ['values', true]]) {
543
+ const Ctor = mode === 'iterator' || def ? AbstractIterator : mode === 'keys' ? AbstractKeyIterator : AbstractValueIterator
544
+ const privateMethod = def ? '_iterator' : '_' + mode
545
+ const publicMethod = mode
546
+
547
+ for (const deferred of [false, true]) {
548
+ t.test(`sublevel ${mode}.seek() target is prefixed (default implementation: ${def}, deferred: ${deferred})`, async function (t) {
549
+ t.plan(2)
550
+
551
+ class MockIterator extends Ctor {
552
+ _seek (target, options) {
553
+ t.is(target, '!sub!123')
554
+ t.is(options.keyEncoding, 'utf8')
555
+ }
556
+ }
557
+
558
+ class MockLevel extends AbstractLevel {
559
+ [privateMethod] (options) {
560
+ return new MockIterator(this, options)
561
+ }
562
+ }
563
+
564
+ const db = new MockLevel({ encodings: { utf8: true } })
565
+ const sub = db.sublevel('sub', { keyEncoding: 'json' })
566
+
567
+ if (!deferred) await sub.open()
568
+
569
+ const it = sub[publicMethod]()
570
+ it.seek(123)
571
+
572
+ if (deferred) await sub.open()
573
+ })
574
+ }
575
+ }
576
+
577
+ t.test('sublevel.clear() is prefixed', async function (t) {
578
+ t.plan(4)
579
+
580
+ const calls = []
581
+ class MockLevel extends AbstractLevel {
582
+ async _clear (options) {
583
+ calls.push(options)
584
+ }
585
+ }
586
+
587
+ const db = new MockLevel({ encodings: { utf8: true } })
588
+ const sub = db.sublevel('sub')
589
+
590
+ const test = async (options, expected) => {
591
+ await sub.clear(options)
592
+ t.same(calls.shift(), expected)
593
+ }
594
+
595
+ await sub.open()
596
+
597
+ await test(undefined, {
598
+ gte: '!sub!',
599
+ lte: '!sub"',
600
+ keyEncoding: 'utf8',
601
+ reverse: false,
602
+ limit: -1
603
+ })
604
+
605
+ await test({ gt: 'a' }, {
606
+ gt: '!sub!a',
607
+ lte: '!sub"',
608
+ keyEncoding: 'utf8',
609
+ reverse: false,
610
+ limit: -1
611
+ })
612
+
613
+ await test({ gte: 'a', lt: 'x' }, {
614
+ gte: '!sub!a',
615
+ lt: '!sub!x',
616
+ keyEncoding: 'utf8',
617
+ reverse: false,
618
+ limit: -1
619
+ })
620
+
621
+ await test({ lte: 'x' }, {
622
+ gte: '!sub!',
623
+ lte: '!sub!x',
624
+ keyEncoding: 'utf8',
625
+ reverse: false,
626
+ limit: -1
627
+ })
628
+ })
629
+
630
+ t.end()
631
+ })
632
+
633
+ test('sublevel encodings', function (t) {
634
+ // NOTE: adapted from subleveldown
635
+ t.test('different sublevels can have different encodings', async function (t) {
636
+ t.plan(6)
637
+
638
+ const puts = []
639
+ const gets = []
640
+
641
+ class MockLevel extends AbstractLevel {
642
+ async _put (key, value, { keyEncoding, valueEncoding }) {
643
+ puts.push({ key, value, keyEncoding, valueEncoding })
644
+ }
645
+
646
+ async _get (key, { keyEncoding, valueEncoding }) {
647
+ gets.push({ key, keyEncoding, valueEncoding })
648
+ return puts.shift().value
649
+ }
650
+ }
651
+
652
+ const db = new MockLevel({ encodings: { buffer: true, utf8: true } })
653
+ const sub1 = db.sublevel('test1', { valueEncoding: 'json' })
654
+ const sub2 = db.sublevel('test2', { keyEncoding: 'buffer', valueEncoding: 'buffer' })
655
+
656
+ await sub1.put('foo', { some: 'json' })
657
+
658
+ t.same(puts, [{
659
+ key: '!test1!foo',
660
+ value: '{"some":"json"}',
661
+ keyEncoding: 'utf8',
662
+ valueEncoding: 'utf8'
663
+ }])
664
+
665
+ t.same(await sub1.get('foo'), { some: 'json' })
666
+ t.same(gets.shift(), {
667
+ key: '!test1!foo',
668
+ keyEncoding: 'utf8',
669
+ valueEncoding: 'utf8'
670
+ })
671
+
672
+ await sub2.put(Buffer.from([1, 2]), Buffer.from([3]))
673
+
674
+ t.same(puts, [{
675
+ key: Buffer.from('!test2!\x01\x02'),
676
+ value: Buffer.from([3]),
677
+ keyEncoding: 'buffer',
678
+ valueEncoding: 'buffer'
679
+ }])
680
+
681
+ t.same(await sub2.get(Buffer.from([1, 2])), Buffer.from([3]))
682
+
683
+ t.same(gets.shift(), {
684
+ key: Buffer.from('!test2!\x01\x02'),
685
+ keyEncoding: 'buffer',
686
+ valueEncoding: 'buffer'
687
+ })
688
+ })
689
+
690
+ t.test('sublevel indirectly supports transcoded encoding', async function (t) {
691
+ t.plan(3)
692
+
693
+ class MockLevel extends AbstractLevel {
694
+ async _put (key, value, { keyEncoding, valueEncoding }) {
695
+ t.same({ key, value, keyEncoding, valueEncoding }, {
696
+ key: Buffer.from('!test!foo'),
697
+ value: Buffer.from('{"some":"json"}'),
698
+ keyEncoding: 'buffer',
699
+ valueEncoding: 'buffer'
700
+ })
701
+ }
702
+
703
+ async _get (key, { keyEncoding, valueEncoding }) {
704
+ t.same({ key, keyEncoding, valueEncoding }, {
705
+ key: Buffer.from('!test!foo'),
706
+ keyEncoding: 'buffer',
707
+ valueEncoding: 'buffer'
708
+ })
709
+ return Buffer.from('{"some":"json"}')
710
+ }
711
+ }
712
+
713
+ const db = new MockLevel({ encodings: { buffer: true } })
714
+ const sub = db.sublevel('test', { valueEncoding: 'json' })
715
+
716
+ await sub.put('foo', { some: 'json' })
717
+ t.same(await sub.get('foo'), { some: 'json' })
718
+ })
719
+
720
+ t.test('concatenating sublevel Buffer keys', async function (t) {
721
+ t.plan(8)
722
+
723
+ const key = Buffer.from('00ff', 'hex')
724
+ const prefixedKey = Buffer.concat([Buffer.from('!test!'), key])
725
+
726
+ class MockLevel extends AbstractLevel {
727
+ async _put (key, value, options) {
728
+ t.is(options.keyEncoding, 'buffer')
729
+ t.is(options.valueEncoding, 'buffer')
730
+ t.same(key, prefixedKey)
731
+ t.same(value, Buffer.from('bar'))
732
+ }
733
+
734
+ async _get (key, options) {
735
+ t.is(options.keyEncoding, 'buffer')
736
+ t.is(options.valueEncoding, 'buffer')
737
+ t.same(key, prefixedKey)
738
+ return Buffer.from('bar')
739
+ }
740
+ }
741
+
742
+ const db = new MockLevel({ encodings: { buffer: true } })
743
+ const sub = db.sublevel('test', { keyEncoding: 'buffer' })
744
+
745
+ await sub.put(key, 'bar')
746
+ t.same(await sub.get(key), 'bar')
747
+ })
748
+
749
+ t.test('concatenating sublevel Uint8Array keys', async function (t) {
750
+ t.plan(8)
751
+
752
+ const key = new Uint8Array([0, 255])
753
+ const textEncoder = new TextEncoder()
754
+ const prefix = textEncoder.encode('!test!')
755
+ const prefixedKey = new Uint8Array(prefix.byteLength + key.byteLength)
756
+
757
+ prefixedKey.set(prefix, 0)
758
+ prefixedKey.set(key, prefix.byteLength)
759
+
760
+ class MockLevel extends AbstractLevel {
761
+ async _put (key, value, options) {
762
+ t.is(options.keyEncoding, 'view')
763
+ t.is(options.valueEncoding, 'view')
764
+ t.same(key, prefixedKey)
765
+ t.same(value, textEncoder.encode('bar'))
766
+ }
767
+
768
+ async _get (key, options) {
769
+ t.is(options.keyEncoding, 'view')
770
+ t.is(options.valueEncoding, 'view')
771
+ t.same(key, prefixedKey)
772
+ return textEncoder.encode('bar')
773
+ }
774
+ }
775
+
776
+ const db = new MockLevel({ encodings: { view: true } })
777
+ const sub = db.sublevel('test', { keyEncoding: 'view' })
778
+
779
+ await sub.put(key, 'bar')
780
+ t.same(await sub.get(key), 'bar')
781
+ })
782
+
783
+ // Also test default fallback implementations of keys() and values()
784
+ for (const [mode, def] of [['iterator', false], ['keys', false], ['values', false], ['keys', true], ['values', true]]) {
785
+ const Ctor = mode === 'iterator' || def ? AbstractIterator : mode === 'keys' ? AbstractKeyIterator : AbstractValueIterator
786
+ const privateMethod = def ? '_iterator' : '_' + mode
787
+ const publicMethod = mode
788
+
789
+ t.test(`unfixing sublevel.${mode}() Buffer keys (default implementation: ${def})`, async function (t) {
790
+ t.plan(3)
791
+
792
+ const testKey = Buffer.from('00ff', 'hex')
793
+ const prefixedKey = Buffer.concat([Buffer.from('!test!'), testKey])
794
+
795
+ class MockIterator extends Ctor {
796
+ async _next () {
797
+ if (mode === 'iterator' || def) {
798
+ return [prefixedKey, 'bar']
799
+ } else if (mode === 'keys') {
800
+ return prefixedKey
801
+ } else {
802
+ return 'bar'
803
+ }
804
+ }
805
+ }
806
+
807
+ class MockLevel extends AbstractLevel {
808
+ [privateMethod] (options) {
809
+ t.is(options.keyEncoding, 'buffer')
810
+ t.is(options.valueEncoding, 'utf8')
811
+ return new MockIterator(this, options)
812
+ }
813
+ }
814
+
815
+ const db = new MockLevel({ encodings: { buffer: true, view: true, utf8: true } })
816
+ const sub = db.sublevel('test', { keyEncoding: 'buffer' })
817
+ const item = await sub[publicMethod]().next()
818
+
819
+ if (mode === 'iterator') {
820
+ t.same(item, [testKey, 'bar'])
821
+ } else {
822
+ t.same(item, mode === 'values' ? 'bar' : testKey)
823
+ }
824
+ })
825
+
826
+ t.test(`unfixing sublevel.${mode}() Uint8Array keys (default implementation: ${def})`, async function (t) {
827
+ t.plan(3)
828
+
829
+ const testKey = new Uint8Array([0, 255])
830
+ const textEncoder = new TextEncoder()
831
+ const prefix = textEncoder.encode('!test!')
832
+ const prefixedKey = new Uint8Array(prefix.byteLength + testKey.byteLength)
833
+
834
+ prefixedKey.set(prefix, 0)
835
+ prefixedKey.set(testKey, prefix.byteLength)
836
+
837
+ class MockIterator extends Ctor {
838
+ async _next () {
839
+ if (mode === 'iterator' || def) {
840
+ return [prefixedKey, 'bar']
841
+ } else if (mode === 'keys') {
842
+ return prefixedKey
843
+ } else {
844
+ return 'bar'
845
+ }
846
+ }
847
+ }
848
+
849
+ class MockLevel extends AbstractLevel {
850
+ [privateMethod] (options) {
851
+ t.is(options.keyEncoding, 'view')
852
+ t.is(options.valueEncoding, 'utf8')
853
+ return new MockIterator(this, options)
854
+ }
855
+ }
856
+
857
+ const db = new MockLevel({ encodings: { buffer: true, view: true, utf8: true } })
858
+ const sub = db.sublevel('test', { keyEncoding: 'view' })
859
+ const item = await sub[publicMethod]().next()
860
+
861
+ if (mode === 'iterator') {
862
+ t.same(item, [testKey, 'bar'])
863
+ } else {
864
+ t.same(item, mode === 'values' ? 'bar' : testKey)
865
+ }
866
+ })
867
+
868
+ mode === 'values' || t.test(`sublevel.${mode}() skips unfixing undefined keys (default implementation: ${def})`, async function (t) {
869
+ // Note, this iterator technically returns invalid data
870
+ class MockIterator extends Ctor {
871
+ async _next () {
872
+ if (mode === 'iterator' || def) {
873
+ return [undefined, 'foo']
874
+ } else {
875
+ return undefined
876
+ }
877
+ }
878
+
879
+ async _nextv () {
880
+ if (mode === 'iterator' || def) {
881
+ return [[undefined, 'foo']]
882
+ } else {
883
+ return [undefined]
884
+ }
885
+ }
886
+
887
+ async _all () {
888
+ if (mode === 'iterator' || def) {
889
+ return [[undefined, 'foo']]
890
+ } else {
891
+ return [undefined]
892
+ }
893
+ }
894
+ }
895
+
896
+ class MockLevel extends AbstractLevel {
897
+ [privateMethod] (options) {
898
+ return new MockIterator(this, options)
899
+ }
900
+ }
901
+
902
+ const db = new MockLevel({ encodings: { utf8: true } })
903
+ const sub = db.sublevel('test')
904
+
905
+ t.same(await sub[publicMethod]().next(), mode === 'iterator' ? [undefined, 'foo'] : undefined)
906
+ t.same(await sub[publicMethod]().nextv(1), mode === 'iterator' ? [[undefined, 'foo']] : [undefined])
907
+ t.same(await sub[publicMethod]().all(), mode === 'iterator' ? [[undefined, 'foo']] : [undefined])
908
+ })
909
+ }
910
+
911
+ t.end()
912
+ })
913
+
914
+ for (const chained of [false, true]) {
915
+ // Chained batch does not support deferred open
916
+ for (const deferred of (chained ? [false] : [false, true])) {
917
+ test(`batch() with sublevel per operation (chained: ${chained}, deferred: ${deferred})`, async function (t) {
918
+ t.plan(6)
919
+
920
+ class MockLevel extends AbstractLevel {
921
+ async _batch (operations, options) {
922
+ t.same(operations, [
923
+ {
924
+ type: 'put',
925
+ sublevel: null,
926
+ key: '!1!a',
927
+ value: '{"foo":123}',
928
+ keyEncoding: 'utf8',
929
+ valueEncoding: 'utf8'
930
+ },
931
+ {
932
+ type: 'put',
933
+ sublevel: null,
934
+ key: '!2!a-y',
935
+ value: '[object Object]',
936
+ keyEncoding: 'utf8',
937
+ valueEncoding: 'utf8'
938
+ },
939
+ {
940
+ type: 'put',
941
+ sublevel: null,
942
+ key: '!1!b',
943
+ value: '[object Object]',
944
+ keyEncoding: 'utf8',
945
+ valueEncoding: 'utf8'
946
+ },
947
+ {
948
+ type: 'put',
949
+ sublevel: null,
950
+ key: '!2!b',
951
+ value: 'b',
952
+ keyEncoding: 'utf8',
953
+ valueEncoding: 'utf8'
954
+ },
955
+ {
956
+ type: 'del',
957
+ sublevel: null,
958
+ key: '!2!c1',
959
+ keyEncoding: 'utf8'
960
+ },
961
+ {
962
+ type: 'del',
963
+ sublevel: null,
964
+ key: '!2!c2-y',
965
+ keyEncoding: 'utf8'
966
+ },
967
+ {
968
+ type: 'del',
969
+ key: 'd-x',
970
+ keyEncoding: 'utf8'
971
+ }
972
+ ])
973
+ t.same(options, {})
974
+ }
975
+ }
976
+
977
+ const db = new MockLevel({ encodings: { utf8: true } }, {
978
+ keyEncoding: {
979
+ encode: (key) => key + '-x',
980
+ decode: (key) => key.slice(0, -2),
981
+ name: 'x',
982
+ format: 'utf8'
983
+ }
984
+ })
985
+
986
+ const sub1 = db.sublevel('1', { valueEncoding: 'json' })
987
+ const sub2 = db.sublevel('2', {
988
+ keyEncoding: {
989
+ encode: (key) => key + '-y',
990
+ decode: (key) => key.slice(0, -2),
991
+ name: 'y',
992
+ format: 'utf8'
993
+ }
994
+ })
995
+
996
+ if (!deferred) await sub1.open()
997
+
998
+ t.is(sub1.keyEncoding().name, 'utf8')
999
+ t.is(sub1.valueEncoding().name, 'json')
1000
+ t.is(sub2.keyEncoding().name, 'y')
1001
+ t.is(sub2.valueEncoding().name, 'utf8')
1002
+
1003
+ if (chained) {
1004
+ await db.batch()
1005
+ // keyEncoding: utf8 (sublevel), valueEncoding: json (sublevel)
1006
+ .put('a', { foo: 123 }, { sublevel: sub1 })
1007
+
1008
+ // keyEncoding: y (sublevel), valueEncoding: utf8 (sublevel)
1009
+ .put('a', { foo: 123 }, { sublevel: sub2 })
1010
+
1011
+ // keyEncoding: utf8 (sublevel), valueEncoding: utf8 (operation)
1012
+ .put('b', { foo: 123 }, { sublevel: sub1, valueEncoding: 'utf8' })
1013
+
1014
+ // keyEncoding: utf8 (operation), valueEncoding: utf8 (sublevel)
1015
+ .put('b', 'b', { sublevel: sub2, keyEncoding: 'utf8' })
1016
+
1017
+ // keyEncoding: utf8 (operation)
1018
+ .del('c1', { sublevel: sub2, keyEncoding: 'utf8' })
1019
+
1020
+ // keyEncoding: y (sublevel)
1021
+ .del('c2', { sublevel: sub2 })
1022
+
1023
+ // keyEncoding: x (db). Should not affect sublevels.
1024
+ .del('d')
1025
+ .write()
1026
+ } else {
1027
+ await db.batch([
1028
+ { type: 'put', sublevel: sub1, key: 'a', value: { foo: 123 } },
1029
+ { type: 'put', sublevel: sub2, key: 'a', value: { foo: 123 } },
1030
+ { type: 'put', sublevel: sub1, key: 'b', value: { foo: 123 }, valueEncoding: 'utf8' },
1031
+ { type: 'put', sublevel: sub2, key: 'b', value: 'b', keyEncoding: 'utf8' },
1032
+ { type: 'del', key: 'c1', sublevel: sub2, keyEncoding: 'utf8' },
1033
+ { type: 'del', key: 'c2', sublevel: sub2 },
1034
+ { type: 'del', key: 'd' }
1035
+ ])
1036
+ }
1037
+ })
1038
+ }
1039
+ }