@based/db 0.0.2 → 0.0.4

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 (315) hide show
  1. package/basedDbNative.cjs +26 -0
  2. package/dist/lib/darwin_aarch64/libdeflate.dylib +0 -0
  3. package/dist/lib/darwin_aarch64/libjemalloc_selva.2.dylib +0 -0
  4. package/dist/lib/darwin_aarch64/libnode-v20.11.1.node +0 -0
  5. package/dist/lib/darwin_aarch64/{libnode-v22.13.1.node → libnode-v20.18.1.node} +0 -0
  6. package/dist/lib/darwin_aarch64/libnode-v22.13.0.node +0 -0
  7. package/dist/lib/darwin_aarch64/libnode-v22.8.0.node +0 -0
  8. package/dist/lib/darwin_aarch64/libselva.dylib +0 -0
  9. package/dist/lib/linux_aarch64/include/cdefs.h +317 -0
  10. package/dist/lib/linux_aarch64/include/jemalloc.h +468 -0
  11. package/dist/lib/linux_aarch64/include/libdeflate.h +322 -0
  12. package/dist/lib/linux_aarch64/include/libdeflate_strings.h +35 -0
  13. package/dist/lib/linux_aarch64/include/linker_set.h +109 -0
  14. package/dist/lib/linux_aarch64/include/queue.h +627 -0
  15. package/dist/lib/linux_aarch64/include/selva/_export.h +7 -0
  16. package/dist/lib/linux_aarch64/include/selva/align.h +9 -0
  17. package/dist/lib/linux_aarch64/include/selva/backoff_timeout.h +29 -0
  18. package/dist/lib/linux_aarch64/include/selva/base64.h +59 -0
  19. package/dist/lib/linux_aarch64/include/selva/base64url.h +59 -0
  20. package/dist/lib/linux_aarch64/include/selva/bitmap.h +95 -0
  21. package/dist/lib/linux_aarch64/include/selva/crc32c.h +17 -0
  22. package/dist/lib/linux_aarch64/include/selva/ctime.h +135 -0
  23. package/dist/lib/linux_aarch64/include/selva/db.h +284 -0
  24. package/dist/lib/linux_aarch64/include/selva/endian.h +301 -0
  25. package/dist/lib/linux_aarch64/include/selva/fast_linear_search.h +23 -0
  26. package/dist/lib/linux_aarch64/include/selva/fast_memmem.h +11 -0
  27. package/dist/lib/linux_aarch64/include/selva/fast_parsei.h +36 -0
  28. package/dist/lib/linux_aarch64/include/selva/fields.h +338 -0
  29. package/dist/lib/linux_aarch64/include/selva/find.h +47 -0
  30. package/dist/lib/linux_aarch64/include/selva/lpf.h +28 -0
  31. package/dist/lib/linux_aarch64/include/selva/node_id_set.h +43 -0
  32. package/dist/lib/linux_aarch64/include/selva/poptop.h +114 -0
  33. package/dist/lib/linux_aarch64/include/selva/queue_r.h +190 -0
  34. package/dist/lib/linux_aarch64/include/selva/selva_hash128.h +39 -0
  35. package/dist/lib/linux_aarch64/include/selva/selva_lang.h +105 -0
  36. package/dist/lib/linux_aarch64/include/selva/selva_math.h +37 -0
  37. package/dist/lib/linux_aarch64/include/selva/selva_string.h +674 -0
  38. package/dist/lib/linux_aarch64/include/selva/sort.h +119 -0
  39. package/dist/lib/linux_aarch64/include/selva/strsearch.h +43 -0
  40. package/dist/lib/linux_aarch64/include/selva/timestamp.h +25 -0
  41. package/dist/lib/linux_aarch64/include/selva/traverse.h +65 -0
  42. package/dist/lib/linux_aarch64/include/selva/types.h +110 -0
  43. package/dist/lib/linux_aarch64/include/selva/vector.h +14 -0
  44. package/dist/lib/linux_aarch64/include/selva/worker_ctx.h +13 -0
  45. package/dist/lib/linux_aarch64/include/selva_error.h +137 -0
  46. package/dist/lib/linux_aarch64/include/selva_lang_code.h +157 -0
  47. package/dist/lib/linux_aarch64/include/tree.h +852 -0
  48. package/dist/lib/linux_aarch64/libdeflate.so +0 -0
  49. package/dist/lib/linux_aarch64/libjemalloc_selva.so.2 +0 -0
  50. package/dist/lib/linux_aarch64/libnode-v20.11.1.node +0 -0
  51. package/dist/lib/linux_aarch64/libnode-v20.18.1.node +0 -0
  52. package/dist/lib/linux_aarch64/libnode-v22.13.0.node +0 -0
  53. package/dist/lib/linux_aarch64/libselva.so +0 -0
  54. package/dist/lib/linux_aarch64/libxxhash.so +0 -0
  55. package/dist/lib/linux_aarch64/libxxhash.so.0 +0 -0
  56. package/dist/lib/linux_aarch64/libxxhash.so.0.8.2 +0 -0
  57. package/dist/lib/linux_x86_64/include/cdefs.h +317 -0
  58. package/dist/lib/linux_x86_64/include/jemalloc.h +468 -0
  59. package/dist/lib/linux_x86_64/include/libdeflate.h +322 -0
  60. package/dist/lib/linux_x86_64/include/libdeflate_strings.h +35 -0
  61. package/dist/lib/linux_x86_64/include/linker_set.h +109 -0
  62. package/dist/lib/linux_x86_64/include/queue.h +627 -0
  63. package/dist/lib/linux_x86_64/include/selva/_export.h +7 -0
  64. package/dist/lib/linux_x86_64/include/selva/align.h +9 -0
  65. package/dist/lib/linux_x86_64/include/selva/backoff_timeout.h +29 -0
  66. package/dist/lib/linux_x86_64/include/selva/base64.h +59 -0
  67. package/dist/lib/linux_x86_64/include/selva/base64url.h +59 -0
  68. package/dist/lib/linux_x86_64/include/selva/bitmap.h +95 -0
  69. package/dist/lib/linux_x86_64/include/selva/crc32c.h +17 -0
  70. package/dist/lib/linux_x86_64/include/selva/ctime.h +135 -0
  71. package/dist/lib/linux_x86_64/include/selva/db.h +284 -0
  72. package/dist/lib/linux_x86_64/include/selva/endian.h +301 -0
  73. package/dist/lib/linux_x86_64/include/selva/fast_linear_search.h +23 -0
  74. package/dist/lib/linux_x86_64/include/selva/fast_memmem.h +11 -0
  75. package/dist/lib/linux_x86_64/include/selva/fast_parsei.h +36 -0
  76. package/dist/lib/linux_x86_64/include/selva/fields.h +338 -0
  77. package/dist/lib/linux_x86_64/include/selva/find.h +47 -0
  78. package/dist/lib/linux_x86_64/include/selva/lpf.h +28 -0
  79. package/dist/lib/linux_x86_64/include/selva/node_id_set.h +43 -0
  80. package/dist/lib/linux_x86_64/include/selva/poptop.h +114 -0
  81. package/dist/lib/linux_x86_64/include/selva/queue_r.h +190 -0
  82. package/dist/lib/linux_x86_64/include/selva/selva_hash128.h +39 -0
  83. package/dist/lib/linux_x86_64/include/selva/selva_lang.h +105 -0
  84. package/dist/lib/linux_x86_64/include/selva/selva_math.h +37 -0
  85. package/dist/lib/linux_x86_64/include/selva/selva_string.h +674 -0
  86. package/dist/lib/linux_x86_64/include/selva/sort.h +119 -0
  87. package/dist/lib/linux_x86_64/include/selva/strsearch.h +43 -0
  88. package/dist/lib/linux_x86_64/include/selva/timestamp.h +25 -0
  89. package/dist/lib/linux_x86_64/include/selva/traverse.h +65 -0
  90. package/dist/lib/linux_x86_64/include/selva/types.h +110 -0
  91. package/dist/lib/linux_x86_64/include/selva/vector.h +14 -0
  92. package/dist/lib/linux_x86_64/include/selva/worker_ctx.h +13 -0
  93. package/dist/lib/linux_x86_64/include/selva_error.h +137 -0
  94. package/dist/lib/linux_x86_64/include/selva_lang_code.h +157 -0
  95. package/dist/lib/linux_x86_64/include/tree.h +852 -0
  96. package/dist/lib/linux_x86_64/libdeflate.so +0 -0
  97. package/dist/lib/linux_x86_64/libjemalloc_selva.so.2 +0 -0
  98. package/dist/lib/linux_x86_64/libnode-v20.11.1.node +0 -0
  99. package/dist/lib/linux_x86_64/libnode-v20.18.1.node +0 -0
  100. package/dist/lib/linux_x86_64/libnode-v22.13.0.node +0 -0
  101. package/dist/lib/linux_x86_64/libselva.so +0 -0
  102. package/dist/lib/linux_x86_64/libxxhash.so +0 -0
  103. package/dist/lib/linux_x86_64/libxxhash.so.0 +0 -0
  104. package/dist/lib/linux_x86_64/libxxhash.so.0.8.2 +0 -0
  105. package/package.json +6 -5
  106. package/dist/src/client/bitWise.js.map +0 -1
  107. package/dist/src/client/crc32.js.map +0 -1
  108. package/dist/src/client/index.js.map +0 -1
  109. package/dist/src/client/modify/ModifyRes.js.map +0 -1
  110. package/dist/src/client/modify/alias.js.map +0 -1
  111. package/dist/src/client/modify/binary.js.map +0 -1
  112. package/dist/src/client/modify/create.js.map +0 -1
  113. package/dist/src/client/modify/fixed.js.map +0 -1
  114. package/dist/src/client/modify/hll.js.map +0 -1
  115. package/dist/src/client/modify/index.js.map +0 -1
  116. package/dist/src/client/modify/modify.js.map +0 -1
  117. package/dist/src/client/modify/references/edge.js.map +0 -1
  118. package/dist/src/client/modify/references/reference.js.map +0 -1
  119. package/dist/src/client/modify/references/references.js.map +0 -1
  120. package/dist/src/client/modify/remove.js.map +0 -1
  121. package/dist/src/client/modify/setCursor.js.map +0 -1
  122. package/dist/src/client/modify/string.js.map +0 -1
  123. package/dist/src/client/modify/text.js.map +0 -1
  124. package/dist/src/client/modify/types.js.map +0 -1
  125. package/dist/src/client/modify/update.js.map +0 -1
  126. package/dist/src/client/modify/upsert.js.map +0 -1
  127. package/dist/src/client/modify/vector.js.map +0 -1
  128. package/dist/src/client/operations.js.map +0 -1
  129. package/dist/src/client/query/BasedDbQuery.js.map +0 -1
  130. package/dist/src/client/query/BasedIterable.js.map +0 -1
  131. package/dist/src/client/query/debug.js.map +0 -1
  132. package/dist/src/client/query/display.js.map +0 -1
  133. package/dist/src/client/query/filter/FilterBranch.js.map +0 -1
  134. package/dist/src/client/query/filter/createFixedFilterBuffer.js.map +0 -1
  135. package/dist/src/client/query/filter/createReferenceFilter.js.map +0 -1
  136. package/dist/src/client/query/filter/createVariableFilterBuffer.js.map +0 -1
  137. package/dist/src/client/query/filter/filter.js.map +0 -1
  138. package/dist/src/client/query/filter/operators.js.map +0 -1
  139. package/dist/src/client/query/filter/parseFilterValue.js.map +0 -1
  140. package/dist/src/client/query/filter/primitiveFilter.js.map +0 -1
  141. package/dist/src/client/query/filter/toBuffer.js.map +0 -1
  142. package/dist/src/client/query/filter/types.js.map +0 -1
  143. package/dist/src/client/query/include/props.js.map +0 -1
  144. package/dist/src/client/query/include/toBuffer.js.map +0 -1
  145. package/dist/src/client/query/include/utils.js.map +0 -1
  146. package/dist/src/client/query/include/walk.js.map +0 -1
  147. package/dist/src/client/query/query.js.map +0 -1
  148. package/dist/src/client/query/queryDef.js.map +0 -1
  149. package/dist/src/client/query/read/read.js.map +0 -1
  150. package/dist/src/client/query/registerQuery.js.map +0 -1
  151. package/dist/src/client/query/search/index.js.map +0 -1
  152. package/dist/src/client/query/sort.js.map +0 -1
  153. package/dist/src/client/query/subscription/index.js.map +0 -1
  154. package/dist/src/client/query/subscription/markers.js.map +0 -1
  155. package/dist/src/client/query/subscription/run.js.map +0 -1
  156. package/dist/src/client/query/subscription/types.js.map +0 -1
  157. package/dist/src/client/query/thresholds.js.map +0 -1
  158. package/dist/src/client/query/toBuffer.js.map +0 -1
  159. package/dist/src/client/query/types.js.map +0 -1
  160. package/dist/src/client/query/validation.js.map +0 -1
  161. package/dist/src/client/string.js.map +0 -1
  162. package/dist/src/client/tree.js.map +0 -1
  163. package/dist/src/index.js.map +0 -1
  164. package/dist/src/native.js.map +0 -1
  165. package/dist/src/server/csmt/draw-dot.js.map +0 -1
  166. package/dist/src/server/csmt/index.js.map +0 -1
  167. package/dist/src/server/csmt/match.js.map +0 -1
  168. package/dist/src/server/csmt/memebership-proof.js.map +0 -1
  169. package/dist/src/server/csmt/tree-utils.js.map +0 -1
  170. package/dist/src/server/csmt/tree.js.map +0 -1
  171. package/dist/src/server/csmt/types.js.map +0 -1
  172. package/dist/src/server/index.js.map +0 -1
  173. package/dist/src/server/migrate/index.js.map +0 -1
  174. package/dist/src/server/migrate/worker.js.map +0 -1
  175. package/dist/src/server/save.js.map +0 -1
  176. package/dist/src/server/schema/schema.js.map +0 -1
  177. package/dist/src/server/schema/selvaBuffer.js.map +0 -1
  178. package/dist/src/server/schema/typeDef.js.map +0 -1
  179. package/dist/src/server/schema/types.js.map +0 -1
  180. package/dist/src/server/schema/utils.js.map +0 -1
  181. package/dist/src/server/start.js.map +0 -1
  182. package/dist/src/server/tree.js.map +0 -1
  183. package/dist/src/server/worker.js.map +0 -1
  184. package/dist/test/alias.d.ts +0 -1
  185. package/dist/test/alias.js +0 -232
  186. package/dist/test/alias.js.map +0 -1
  187. package/dist/test/binary.d.ts +0 -1
  188. package/dist/test/binary.js +0 -45
  189. package/dist/test/binary.js.map +0 -1
  190. package/dist/test/boolean.d.ts +0 -1
  191. package/dist/test/boolean.js +0 -43
  192. package/dist/test/boolean.js.map +0 -1
  193. package/dist/test/clientServer.d.ts +0 -1
  194. package/dist/test/clientServer.js +0 -64
  195. package/dist/test/clientServer.js.map +0 -1
  196. package/dist/test/concurrency.d.ts +0 -1
  197. package/dist/test/concurrency.js +0 -61
  198. package/dist/test/concurrency.js.map +0 -1
  199. package/dist/test/csmt.d.ts +0 -1
  200. package/dist/test/csmt.js +0 -365
  201. package/dist/test/csmt.js.map +0 -1
  202. package/dist/test/edges.d.ts +0 -1
  203. package/dist/test/edges.js +0 -295
  204. package/dist/test/edges.js.map +0 -1
  205. package/dist/test/edgesReference.d.ts +0 -1
  206. package/dist/test/edgesReference.js +0 -179
  207. package/dist/test/edgesReference.js.map +0 -1
  208. package/dist/test/edgesReferences.d.ts +0 -1
  209. package/dist/test/edgesReferences.js +0 -472
  210. package/dist/test/edgesReferences.js.map +0 -1
  211. package/dist/test/enum.d.ts +0 -1
  212. package/dist/test/enum.js +0 -44
  213. package/dist/test/enum.js.map +0 -1
  214. package/dist/test/filter.d.ts +0 -1
  215. package/dist/test/filter.js +0 -512
  216. package/dist/test/filter.js.map +0 -1
  217. package/dist/test/filterString.d.ts +0 -1
  218. package/dist/test/filterString.js +0 -482
  219. package/dist/test/filterString.js.map +0 -1
  220. package/dist/test/flush.d.ts +0 -1
  221. package/dist/test/flush.js +0 -44
  222. package/dist/test/flush.js.map +0 -1
  223. package/dist/test/hll.d.ts +0 -1
  224. package/dist/test/hll.js +0 -32
  225. package/dist/test/hll.js.map +0 -1
  226. package/dist/test/migration.d.ts +0 -1
  227. package/dist/test/migration.js +0 -112
  228. package/dist/test/migration.js.map +0 -1
  229. package/dist/test/number.d.ts +0 -1
  230. package/dist/test/number.js +0 -172
  231. package/dist/test/number.js.map +0 -1
  232. package/dist/test/range.d.ts +0 -1
  233. package/dist/test/range.js +0 -70
  234. package/dist/test/range.js.map +0 -1
  235. package/dist/test/references.d.ts +0 -1
  236. package/dist/test/references.js +0 -350
  237. package/dist/test/references.js.map +0 -1
  238. package/dist/test/referencesIndex.d.ts +0 -1
  239. package/dist/test/referencesIndex.js +0 -151
  240. package/dist/test/referencesIndex.js.map +0 -1
  241. package/dist/test/referencesModify.d.ts +0 -1
  242. package/dist/test/referencesModify.js +0 -79
  243. package/dist/test/referencesModify.js.map +0 -1
  244. package/dist/test/remove.d.ts +0 -1
  245. package/dist/test/remove.js +0 -61
  246. package/dist/test/remove.js.map +0 -1
  247. package/dist/test/rootProps.d.ts +0 -1
  248. package/dist/test/rootProps.js +0 -53
  249. package/dist/test/rootProps.js.map +0 -1
  250. package/dist/test/save.d.ts +0 -1
  251. package/dist/test/save.js +0 -43
  252. package/dist/test/save.js.map +0 -1
  253. package/dist/test/saveRange.d.ts +0 -1
  254. package/dist/test/saveRange.js +0 -230
  255. package/dist/test/saveRange.js.map +0 -1
  256. package/dist/test/search.d.ts +0 -1
  257. package/dist/test/search.js +0 -322
  258. package/dist/test/search.js.map +0 -1
  259. package/dist/test/shared/assert.d.ts +0 -5
  260. package/dist/test/shared/assert.js +0 -75
  261. package/dist/test/shared/assert.js.map +0 -1
  262. package/dist/test/shared/examples.d.ts +0 -6
  263. package/dist/test/shared/examples.js +0 -1323
  264. package/dist/test/shared/examples.js.map +0 -1
  265. package/dist/test/shared/playground.d.ts +0 -1
  266. package/dist/test/shared/playground.js +0 -250
  267. package/dist/test/shared/playground.js.map +0 -1
  268. package/dist/test/shared/test.d.ts +0 -11
  269. package/dist/test/shared/test.js +0 -112
  270. package/dist/test/shared/test.js.map +0 -1
  271. package/dist/test/shared/worker.d.ts +0 -1
  272. package/dist/test/shared/worker.js +0 -127
  273. package/dist/test/shared/worker.js.map +0 -1
  274. package/dist/test/simpleQuery.d.ts +0 -1
  275. package/dist/test/simpleQuery.js +0 -43
  276. package/dist/test/simpleQuery.js.map +0 -1
  277. package/dist/test/singleRef.d.ts +0 -1
  278. package/dist/test/singleRef.js +0 -572
  279. package/dist/test/singleRef.js.map +0 -1
  280. package/dist/test/singleRefQuery.d.ts +0 -1
  281. package/dist/test/singleRefQuery.js +0 -136
  282. package/dist/test/singleRefQuery.js.map +0 -1
  283. package/dist/test/sort.d.ts +0 -1
  284. package/dist/test/sort.js +0 -401
  285. package/dist/test/sort.js.map +0 -1
  286. package/dist/test/sortIds.d.ts +0 -1
  287. package/dist/test/sortIds.js +0 -104
  288. package/dist/test/sortIds.js.map +0 -1
  289. package/dist/test/sortNumber.d.ts +0 -1
  290. package/dist/test/sortNumber.js +0 -76
  291. package/dist/test/sortNumber.js.map +0 -1
  292. package/dist/test/sortString.d.ts +0 -1
  293. package/dist/test/sortString.js +0 -118
  294. package/dist/test/sortString.js.map +0 -1
  295. package/dist/test/string.d.ts +0 -1
  296. package/dist/test/string.js +0 -310
  297. package/dist/test/string.js.map +0 -1
  298. package/dist/test/subscription.d.ts +0 -1
  299. package/dist/test/subscription.js +0 -336
  300. package/dist/test/subscription.js.map +0 -1
  301. package/dist/test/text.d.ts +0 -1
  302. package/dist/test/text.js +0 -87
  303. package/dist/test/text.js.map +0 -1
  304. package/dist/test/timestamp.d.ts +0 -1
  305. package/dist/test/timestamp.js +0 -50
  306. package/dist/test/timestamp.js.map +0 -1
  307. package/dist/test/update.d.ts +0 -1
  308. package/dist/test/update.js +0 -223
  309. package/dist/test/update.js.map +0 -1
  310. package/dist/test/validation.d.ts +0 -1
  311. package/dist/test/validation.js +0 -90
  312. package/dist/test/validation.js.map +0 -1
  313. package/dist/test/vector.d.ts +0 -1
  314. package/dist/test/vector.js +0 -47
  315. package/dist/test/vector.js.map +0 -1
@@ -1,45 +0,0 @@
1
- import { BasedDb } from '../src/index.js';
2
- import test from './shared/test.js';
3
- import { deepEqual, equal } from './shared/assert.js';
4
- import { italy } from './shared/examples.js';
5
- await test('simple', async (t) => {
6
- const db = new BasedDb({
7
- path: t.tmp,
8
- });
9
- await db.start({ clean: true });
10
- t.after(() => {
11
- return db.destroy();
12
- });
13
- await db.putSchema({
14
- types: {
15
- user: {
16
- props: {
17
- file: { type: 'binary' },
18
- },
19
- },
20
- },
21
- });
22
- db.create('user', {
23
- file: new Uint32Array([1, 2, 3, 4]),
24
- });
25
- await db.drain();
26
- deepEqual((await db.query('user').get()).toObject(), [
27
- {
28
- id: 1,
29
- file: new Uint8Array(new Uint32Array([1, 2, 3, 4]).buffer),
30
- },
31
- ]);
32
- const id = await db.create('user', {
33
- file: new Uint8Array([1, 2, 3, 4]),
34
- });
35
- deepEqual((await db.query('user', id).get()).toObject(), {
36
- id,
37
- file: new Uint8Array([1, 2, 3, 4]),
38
- });
39
- const italyBytes = Buffer.from(italy, 'utf-8');
40
- const id2 = await db.create('user', {
41
- file: italyBytes,
42
- });
43
- equal((await db.query('user', id2).get()).toObject().file.length, italyBytes.byteLength);
44
- });
45
- //# sourceMappingURL=binary.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"binary.js","sourceRoot":"","sources":["../../test/binary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,IAAI,MAAM,kBAAkB,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAE5C,MAAM,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC/B,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC;QACrB,IAAI,EAAE,CAAC,CAAC,GAAG;KACZ,CAAC,CAAA;IAEF,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAE/B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACX,OAAO,EAAE,CAAC,OAAO,EAAE,CAAA;IACrB,CAAC,CAAC,CAAA;IAEF,MAAM,EAAE,CAAC,SAAS,CAAC;QACjB,KAAK,EAAE;YACL,IAAI,EAAE;gBACJ,KAAK,EAAE;oBACL,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBACzB;aACF;SACF;KACF,CAAC,CAAA;IAEF,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE;QAChB,IAAI,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KACpC,CAAC,CAAA;IAEF,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;IAEhB,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE;QACnD;YACE,EAAE,EAAE,CAAC;YACL,IAAI,EAAE,IAAI,UAAU,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;SAC3D;KACF,CAAC,CAAA;IAEF,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE;QACjC,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KACnC,CAAC,CAAA;IAEF,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE;QACvD,EAAE;QACF,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KACnC,CAAC,CAAA;IAEF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAC9C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE;QAClC,IAAI,EAAE,UAAU;KACjB,CAAC,CAAA;IAEF,KAAK,CACH,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,EAC1D,UAAU,CAAC,UAAU,CACtB,CAAA;AACH,CAAC,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,43 +0,0 @@
1
- import { BasedDb } from '../src/index.js';
2
- import test from './shared/test.js';
3
- import { deepEqual } from './shared/assert.js';
4
- await test('boolean', async (t) => {
5
- const db = new BasedDb({
6
- path: t.tmp,
7
- });
8
- await db.start({ clean: true });
9
- t.after(() => {
10
- return db.destroy();
11
- });
12
- await db.putSchema({
13
- types: {
14
- user: {
15
- props: {
16
- isNice: 'boolean',
17
- },
18
- },
19
- },
20
- });
21
- db.create('user', {});
22
- db.create('user', {
23
- isNice: true,
24
- });
25
- db.create('user', {
26
- isNice: false,
27
- });
28
- await db.drain();
29
- deepEqual((await db.query('user').get()).toObject(), [
30
- { id: 1, isNice: false },
31
- { id: 2, isNice: true },
32
- { id: 3, isNice: false },
33
- ]);
34
- deepEqual((await db.query('user').filter('isNice', '=', true).get()).toObject(), [{ id: 2, isNice: true }]);
35
- deepEqual((await db.query('user').filter('isNice').get()).toObject(), [
36
- { id: 2, isNice: true },
37
- ]);
38
- deepEqual((await db.query('user').filter('isNice', false).get()).toObject(), [
39
- { id: 1, isNice: false },
40
- { id: 3, isNice: false },
41
- ]);
42
- });
43
- //# sourceMappingURL=boolean.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"boolean.js","sourceRoot":"","sources":["../../test/boolean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,IAAI,MAAM,kBAAkB,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9C,MAAM,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAChC,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC;QACrB,IAAI,EAAE,CAAC,CAAC,GAAG;KACZ,CAAC,CAAA;IAEF,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAE/B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACX,OAAO,EAAE,CAAC,OAAO,EAAE,CAAA;IACrB,CAAC,CAAC,CAAA;IAEF,MAAM,EAAE,CAAC,SAAS,CAAC;QACjB,KAAK,EAAE;YACL,IAAI,EAAE;gBACJ,KAAK,EAAE;oBACL,MAAM,EAAE,SAAS;iBAClB;aACF;SACF;KACF,CAAC,CAAA;IAEF,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACrB,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE;QAChB,MAAM,EAAE,IAAI;KACb,CAAC,CAAA;IAEF,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE;QAChB,MAAM,EAAE,KAAK;KACd,CAAC,CAAA;IAEF,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;IAEhB,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE;QACnD,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE;QACxB,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;QACvB,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE;KACzB,CAAC,CAAA;IAEF,SAAS,CACP,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,EACrE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAC1B,CAAA;IAED,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE;QACpE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;KACxB,CAAC,CAAA;IAEF,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC3E,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE;QACxB,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE;KACzB,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,64 +0,0 @@
1
- import { DbClient } from '../src/client/index.js';
2
- import { DbServer } from '../src/server/index.js';
3
- import { deepEqual } from './shared/assert.js';
4
- import test from './shared/test.js';
5
- await test('client server', async (t) => {
6
- const server = new DbServer({
7
- path: t.tmp,
8
- onSchemaChange(schema) {
9
- client1.putLocalSchema(schema);
10
- client2.putLocalSchema(schema);
11
- },
12
- });
13
- await server.start({ clean: true });
14
- t.after(() => {
15
- return server.destroy();
16
- });
17
- const hooks = {
18
- async putSchema(schema, fromStart, transformFns) {
19
- return server.putSchema(schema, fromStart, transformFns);
20
- },
21
- async flushModify(buf) {
22
- const offsets = server.modify(buf);
23
- return { offsets };
24
- },
25
- async getQueryBuf(buf) {
26
- return server.getQueryBuf(buf);
27
- },
28
- };
29
- const client1 = new DbClient({
30
- hooks,
31
- });
32
- const client2 = new DbClient({
33
- hooks,
34
- });
35
- await client1.putSchema({
36
- types: {
37
- user: {
38
- name: 'string',
39
- },
40
- },
41
- });
42
- const youzi = await client1.create('user', {
43
- name: 'youzi',
44
- });
45
- const jamez = await client1.create('user', {
46
- name: 'jamez',
47
- });
48
- deepEqual(await client1.query('user').get().toObject(), [
49
- { id: 1, name: 'youzi' },
50
- { id: 2, name: 'jamez' },
51
- ]);
52
- await client1.putSchema({
53
- types: {
54
- user: {
55
- age: 'number',
56
- },
57
- },
58
- });
59
- deepEqual(await client1.query('user').get().toObject(), [
60
- { id: 1, age: 0 },
61
- { id: 2, age: 0 },
62
- ]);
63
- });
64
- //# sourceMappingURL=clientServer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clientServer.js","sourceRoot":"","sources":["../../test/clientServer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAiB,MAAM,wBAAwB,CAAA;AAEhE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAU,MAAM,oBAAoB,CAAA;AACtD,OAAO,IAAI,MAAM,kBAAkB,CAAA;AAEnC,MAAM,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACtC,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC;QAC1B,IAAI,EAAE,CAAC,CAAC,GAAG;QACX,cAAc,CAAC,MAAM;YACnB,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;YAC9B,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAChC,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAEnC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACX,OAAO,MAAM,CAAC,OAAO,EAAE,CAAA;IACzB,CAAC,CAAC,CAAA;IAEF,MAAM,KAAK,GAAkB;QAC3B,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY;YAC7C,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,CAAA;QAC1D,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,GAAG;YACnB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAClC,OAAO,EAAE,OAAO,EAAE,CAAA;QACpB,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,GAAG;YACnB,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QAChC,CAAC;KACF,CAAA;IAED,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAC;QAC3B,KAAK;KACN,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAC;QAC3B,KAAK;KACN,CAAC,CAAA;IAEF,MAAM,OAAO,CAAC,SAAS,CAAC;QACtB,KAAK,EAAE;YACL,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;aACf;SACF;KACF,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;QACzC,IAAI,EAAE,OAAO;KACd,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;QACzC,IAAI,EAAE,OAAO;KACd,CAAC,CAAA;IAEF,SAAS,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE;QACtD,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;QACxB,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;KACzB,CAAC,CAAA;IAEF,MAAM,OAAO,CAAC,SAAS,CAAC;QACtB,KAAK,EAAE;YACL,IAAI,EAAE;gBACJ,GAAG,EAAE,QAAQ;aACd;SACF;KACF,CAAC,CAAA;IAEF,SAAS,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE;QACtD,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;QACjB,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;KAClB,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,61 +0,0 @@
1
- import { BasedDb } from '../src/index.js';
2
- import test from './shared/test.js';
3
- import { setTimeout as setTimeoutAsync } from 'timers/promises';
4
- await test('concurrency', async (t) => {
5
- const db = new BasedDb({
6
- path: t.tmp,
7
- });
8
- await db.start({ clean: true });
9
- t.after(() => {
10
- return db.destroy();
11
- });
12
- await db.putSchema({
13
- types: {
14
- user: {
15
- props: {
16
- friends: {
17
- items: {
18
- ref: 'user',
19
- prop: 'friends',
20
- },
21
- },
22
- },
23
- },
24
- },
25
- });
26
- console.time('create stuff');
27
- let id = 0;
28
- let queries = 0;
29
- let refs = [];
30
- let timer = setTimeout(() => {
31
- // db.destroy()
32
- timer = null;
33
- }, 5e3);
34
- const query = async () => {
35
- queries++;
36
- try {
37
- await db.query('user').include('friends').range(0, 1000_000).get();
38
- }
39
- catch (e) {
40
- console.error('err:', e);
41
- }
42
- queries--;
43
- };
44
- while (timer) {
45
- let i = 100;
46
- while (i--) {
47
- query();
48
- }
49
- while (timer && queries) {
50
- db.create('user', {
51
- friends: refs,
52
- });
53
- refs.push(++id);
54
- await db.drain();
55
- await setTimeoutAsync();
56
- }
57
- }
58
- clearTimeout(timer);
59
- console.timeEnd('create stuff');
60
- });
61
- //# sourceMappingURL=concurrency.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"concurrency.js","sourceRoot":"","sources":["../../test/concurrency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,IAAI,MAAM,kBAAkB,CAAA;AACnC,OAAO,EAAE,UAAU,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE/D,MAAM,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACpC,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC;QACrB,IAAI,EAAE,CAAC,CAAC,GAAG;KACZ,CAAC,CAAA;IAEF,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAE/B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACX,OAAO,EAAE,CAAC,OAAO,EAAE,CAAA;IACrB,CAAC,CAAC,CAAA;IAEF,MAAM,EAAE,CAAC,SAAS,CAAC;QACjB,KAAK,EAAE;YACL,IAAI,EAAE;gBACJ,KAAK,EAAE;oBACL,OAAO,EAAE;wBACP,KAAK,EAAE;4BACL,GAAG,EAAE,MAAM;4BACX,IAAI,EAAE,SAAS;yBAChB;qBACF;iBACF;aACF;SACF;KACF,CAAC,CAAA;IAEF,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAE5B,IAAI,EAAE,GAAG,CAAC,CAAA;IACV,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,IAAI,IAAI,GAAG,EAAE,CAAA;IACb,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC1B,eAAe;QACf,KAAK,GAAG,IAAI,CAAA;IACd,CAAC,EAAE,GAAG,CAAC,CAAA;IAEP,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;QACvB,OAAO,EAAE,CAAA;QACT,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAA;QACpE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAC1B,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC,CAAA;IAED,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,GAAG,CAAA;QACX,OAAO,CAAC,EAAE,EAAE,CAAC;YACX,KAAK,EAAE,CAAA;QACT,CAAC;QACD,OAAO,KAAK,IAAI,OAAO,EAAE,CAAC;YACxB,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE;gBAChB,OAAO,EAAE,IAAI;aACd,CAAC,CAAA;YACF,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;YACf,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;YAChB,MAAM,eAAe,EAAE,CAAA;QACzB,CAAC;IACH,CAAC;IAED,YAAY,CAAC,KAAK,CAAC,CAAA;IAEnB,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;AACjC,CAAC,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- export {};
package/dist/test/csmt.js DELETED
@@ -1,365 +0,0 @@
1
- import { strict as assert } from 'node:assert';
2
- import { createHash } from 'crypto';
3
- import test from './shared/test.js';
4
- import { equal } from './shared/assert.js';
5
- import { createTree } from '../src/server/csmt/index.js';
6
- const shortHash = (buf) => buf.toString('base64').substring(0, 5);
7
- function genNodeHash(lHash, rHash) {
8
- return createHash('sha256').update(lHash).update(rHash).digest();
9
- }
10
- await test('insert: A basic tree is formed correctly', async (t) => {
11
- const tree = createTree(() => createHash('sha256'));
12
- tree.insert(1, Buffer.from('a'));
13
- tree.insert(2, Buffer.from('b'));
14
- tree.insert(3, Buffer.from('c'));
15
- tree.insert(4, Buffer.from('d'));
16
- const root = tree.getRoot();
17
- assert.ok(root);
18
- assert.ok(root.hash instanceof Buffer);
19
- assert.equal(shortHash(root.hash), 'jq/kE');
20
- assert.equal(root.key, 4);
21
- assert.ok(root.left);
22
- assert.equal(shortHash(root.left.hash), '8AS3E');
23
- assert.equal(root.left.key, 3);
24
- assert.ok(root.left.left);
25
- assert.equal(shortHash(root.left.left.hash), 'YQ==');
26
- assert.equal(root.left.left.key, 1);
27
- assert.ok(!root.left.left.left);
28
- assert.ok(!root.left.left.right);
29
- assert.ok(root.left.right);
30
- assert.equal(shortHash(root.left.right.hash), 'Hgu9b');
31
- assert.equal(root.left.right.key, 3);
32
- assert.ok(root.left.right.left);
33
- assert.equal(shortHash(root.left.right.left.hash), 'Yg==');
34
- assert.equal(root.left.right.left.key, 2);
35
- assert.ok(!root.left.right.left.left);
36
- assert.ok(!root.left.right.left.right);
37
- assert.ok(root.left.right.right);
38
- assert.equal(shortHash(root.left.right.right.hash), 'Yw==');
39
- assert.equal(root.left.right.right.key, 3);
40
- assert.ok(!root.left.right.right.left);
41
- assert.ok(!root.left.right.right.right);
42
- assert.ok(root.right);
43
- assert.equal(shortHash(root.right.hash), 'ZA==');
44
- assert.equal(root.right.key, 4);
45
- assert.ok(!root.right.left);
46
- assert.ok(!root.right.right);
47
- });
48
- await test('insert: The root hash is recomputed on every insert', async (t) => {
49
- const tree = createTree(() => createHash('sha256'));
50
- tree.insert(1, Buffer.from('a'));
51
- assert.equal(shortHash(tree.getRoot().hash), 'YQ==');
52
- tree.insert(2, Buffer.from('b'));
53
- assert.equal(shortHash(tree.getRoot().hash), '+44g/');
54
- tree.insert(5, Buffer.from('c'));
55
- assert.equal(shortHash(tree.getRoot().hash), 'OvuAS');
56
- });
57
- await test('insert: Trees are reproducible regardless of the insertion order', async (t) => {
58
- const tree1 = createTree(() => createHash('sha256'));
59
- const tree2 = createTree(() => createHash('sha256'));
60
- tree1.insert(1, Buffer.from('a'));
61
- tree1.insert(2, Buffer.from('b'));
62
- tree1.insert(3, Buffer.from('c'));
63
- tree1.insert(4, Buffer.from('d'));
64
- tree2.insert(2, Buffer.from('b'));
65
- tree2.insert(4, Buffer.from('d'));
66
- tree2.insert(3, Buffer.from('c'));
67
- tree2.insert(1, Buffer.from('a'));
68
- assert.deepEqual(tree1.getRoot(), tree2.getRoot());
69
- });
70
- await test('insert: Difference in a single node causes the root hash to differ', async (t) => {
71
- const tree1 = createTree(() => createHash('sha256'));
72
- const tree2 = createTree(() => createHash('sha256'));
73
- tree1.insert(1, Buffer.from('a'));
74
- tree1.insert(2, Buffer.from('b'));
75
- tree1.insert(3, Buffer.from('c'));
76
- tree1.insert(4, Buffer.from('d'));
77
- tree2.insert(1, Buffer.from('a'));
78
- tree2.insert(2, Buffer.from('b'));
79
- tree2.insert(3, Buffer.from('x'));
80
- tree2.insert(4, Buffer.from('d'));
81
- assert.notEqual(tree2.getRoot().hash, tree1.getRoot().hash);
82
- });
83
- await test('delete: two trees are no longer equal after deleting a key', async (t) => {
84
- const tree1 = createTree(() => createHash('sha256'));
85
- const tree2 = createTree(() => createHash('sha256'));
86
- tree1.insert(1, Buffer.from('a'));
87
- tree1.insert(2, Buffer.from('b'));
88
- tree1.insert(3, Buffer.from('c'));
89
- tree1.insert(4, Buffer.from('d'));
90
- tree1.insert(7, Buffer.from('g'));
91
- tree1.insert(8, Buffer.from('h'));
92
- tree1.insert(9, Buffer.from('i'));
93
- tree2.insert(1, Buffer.from('a'));
94
- tree2.insert(2, Buffer.from('b'));
95
- tree2.insert(3, Buffer.from('c'));
96
- tree2.insert(4, Buffer.from('d'));
97
- tree2.insert(7, Buffer.from('g'));
98
- tree2.insert(8, Buffer.from('h'));
99
- tree2.insert(9, Buffer.from('i'));
100
- assert.deepEqual(tree1.getRoot(), tree2.getRoot());
101
- tree1.delete(7);
102
- assert.notEqual(tree1.getRoot(), tree2.getRoot());
103
- });
104
- await test('delete: delete rebalances the tree properly', async (t) => {
105
- const tree1 = createTree(() => createHash('sha256'));
106
- const tree2 = createTree(() => createHash('sha256'));
107
- tree1.insert(1, Buffer.from('a'));
108
- tree1.insert(2, Buffer.from('b'));
109
- tree1.insert(3, Buffer.from('c'));
110
- tree1.insert(4, Buffer.from('d'));
111
- tree1.insert(5, Buffer.from('e'));
112
- tree1.insert(6, Buffer.from('f'));
113
- tree1.insert(7, Buffer.from('g'));
114
- tree1.insert(8, Buffer.from('h'));
115
- tree1.insert(9, Buffer.from('i'));
116
- tree1.insert(10, Buffer.from('j'));
117
- tree1.insert(11, Buffer.from('k'));
118
- tree1.insert(12, Buffer.from('l'));
119
- tree1.insert(13, Buffer.from('m'));
120
- tree1.insert(14, Buffer.from('n'));
121
- tree1.insert(15, Buffer.from('p'));
122
- tree1.insert(16, Buffer.from('q'));
123
- tree1.insert(17, Buffer.from('r'));
124
- tree1.insert(18, Buffer.from('s'));
125
- tree1.insert(19, Buffer.from('t'));
126
- tree2.insert(1, Buffer.from('a'));
127
- tree2.insert(2, Buffer.from('b'));
128
- tree2.insert(3, Buffer.from('c'));
129
- tree2.insert(4, Buffer.from('d'));
130
- tree2.insert(5, Buffer.from('e'));
131
- tree2.insert(6, Buffer.from('f'));
132
- tree2.insert(7, Buffer.from('g'));
133
- tree2.insert(9, Buffer.from('i'));
134
- tree2.insert(10, Buffer.from('j'));
135
- tree2.insert(11, Buffer.from('k'));
136
- tree2.insert(12, Buffer.from('l'));
137
- tree2.insert(13, Buffer.from('m'));
138
- tree2.insert(14, Buffer.from('n'));
139
- tree2.insert(15, Buffer.from('p'));
140
- tree2.insert(16, Buffer.from('q'));
141
- tree2.insert(17, Buffer.from('r'));
142
- tree2.insert(18, Buffer.from('s'));
143
- tree2.insert(19, Buffer.from('t'));
144
- assert.notDeepEqual(tree1.getRoot(), tree2.getRoot());
145
- tree1.delete(8);
146
- assert.deepEqual(tree1.getRoot(), tree2.getRoot());
147
- });
148
- await test('delete: delete rebalances the tree properly (upped boundary)', async (t) => {
149
- const tree1 = createTree(() => createHash('sha256'));
150
- const tree2 = createTree(() => createHash('sha256'));
151
- tree1.insert(1, Buffer.from('a'));
152
- tree1.insert(2, Buffer.from('b'));
153
- tree1.insert(3, Buffer.from('c'));
154
- tree1.insert(4, Buffer.from('d'));
155
- tree2.insert(1, Buffer.from('a'));
156
- tree2.insert(2, Buffer.from('b'));
157
- tree2.insert(3, Buffer.from('c'));
158
- tree2.insert(4, Buffer.from('d'));
159
- tree2.insert(5, Buffer.from('e'));
160
- assert.notDeepEqual(tree1.getRoot(), tree2.getRoot());
161
- tree2.delete(5);
162
- assert.deepEqual(tree1.getRoot(), tree2.getRoot());
163
- });
164
- await test('delete rebalances the tree properly (lower boundary)', async (t) => {
165
- const tree1 = createTree(() => createHash('sha256'));
166
- const tree2 = createTree(() => createHash('sha256'));
167
- tree1.insert(1, Buffer.from('a'));
168
- tree1.insert(4, Buffer.from('b'));
169
- tree1.insert(3, Buffer.from('b'));
170
- tree1.insert(5, Buffer.from('c'));
171
- tree1.insert(2, Buffer.from('b'));
172
- tree2.insert(2, Buffer.from('b'));
173
- tree2.insert(3, Buffer.from('b'));
174
- tree2.insert(4, Buffer.from('b'));
175
- tree2.insert(5, Buffer.from('c'));
176
- assert.notDeepEqual(tree1.getRoot(), tree2.getRoot());
177
- tree1.delete(1);
178
- assert.deepEqual(tree1.getRoot(), tree2.getRoot());
179
- });
180
- await test('diff: Equal trees have zero diff', async (t) => {
181
- const tree1 = createTree(() => createHash('sha256'));
182
- const tree2 = createTree(() => createHash('sha256'));
183
- tree1.insert(1, Buffer.from('a'));
184
- tree1.insert(2, Buffer.from('b'));
185
- tree1.insert(3, Buffer.from('c'));
186
- tree1.insert(4, Buffer.from('d'));
187
- tree2.insert(1, Buffer.from('a'));
188
- tree2.insert(2, Buffer.from('b'));
189
- tree2.insert(3, Buffer.from('c'));
190
- tree2.insert(4, Buffer.from('d'));
191
- const diff = tree1.diff(tree2);
192
- assert.equal(diff.left.length, 0);
193
- assert.equal(diff.right.length, 0);
194
- });
195
- await test('diff: Equal trees have zero diff both ways', async (t) => {
196
- const tree1 = createTree(() => createHash('sha256'));
197
- const tree2 = createTree(() => createHash('sha256'));
198
- tree1.insert(1, Buffer.from('a'));
199
- tree1.insert(2, Buffer.from('b'));
200
- tree1.insert(3, Buffer.from('c'));
201
- tree1.insert(4, Buffer.from('d'));
202
- tree2.insert(1, Buffer.from('a'));
203
- tree2.insert(2, Buffer.from('b'));
204
- tree2.insert(3, Buffer.from('c'));
205
- tree2.insert(4, Buffer.from('d'));
206
- const diff1 = tree1.diff(tree2);
207
- const diff2 = tree2.diff(tree1);
208
- assert.equal(diff1.left.length, 0);
209
- assert.equal(diff1.right.length, 0);
210
- assert.equal(diff2.left.length, 0);
211
- assert.equal(diff2.right.length, 0);
212
- });
213
- await test('diff: A tree has no diff against itself', async (t) => {
214
- const tree = createTree(() => createHash('sha256'));
215
- tree.insert(1, Buffer.from('a'));
216
- tree.insert(2, Buffer.from('b'));
217
- const diff = tree.diff(tree);
218
- assert.equal(diff.left.length, 0);
219
- assert.equal(diff.right.length, 0);
220
- });
221
- await test('diff: Right tree has one new node', async (t) => {
222
- const tree1 = createTree(() => createHash('sha256'));
223
- const tree2 = createTree(() => createHash('sha256'));
224
- tree1.insert(1, Buffer.from('a'));
225
- tree1.insert(4, Buffer.from('b'));
226
- tree1.insert(3, Buffer.from('b'));
227
- tree1.insert(5, Buffer.from('b'));
228
- tree2.insert(1, Buffer.from('a'));
229
- tree2.insert(4, Buffer.from('b'));
230
- tree2.insert(3, Buffer.from('b'));
231
- tree2.insert(5, Buffer.from('b'));
232
- tree2.insert(2, Buffer.from('b'));
233
- const { left, right } = tree1.diff(tree2);
234
- assert.equal(left.length, 0);
235
- assert.equal(right.length, 1);
236
- assert.equal(right[0][0], 2);
237
- assert.deepEqual(right[0][1], Buffer.from('b'));
238
- });
239
- await test('diff: The same key is marked as a diff in both because the hash has changed', async (t) => {
240
- const tree1 = createTree(() => createHash('sha256'));
241
- const tree2 = createTree(() => createHash('sha256'));
242
- tree1.insert(1, Buffer.from('a'));
243
- tree1.insert(4, Buffer.from('b'));
244
- tree1.insert(3, Buffer.from('b'));
245
- tree1.insert(5, Buffer.from('b'));
246
- tree2.insert(1, Buffer.from('a'));
247
- tree2.insert(4, Buffer.from('b'));
248
- tree2.insert(3, Buffer.from('b'));
249
- tree2.insert(5, Buffer.from('c')); // hash changed
250
- const { left, right } = tree1.diff(tree2);
251
- assert.equal(left.length, 1);
252
- assert.equal(left[0][0], 5);
253
- assert.deepEqual(left[0][1], Buffer.from('b'));
254
- assert.equal(right.length, 1);
255
- assert.equal(right[0][0], 5);
256
- assert.deepEqual(right[0][1], Buffer.from('c'));
257
- });
258
- await test('proof: Prove that 3 is a member of the tree', async (t) => {
259
- const tree = createTree(() => createHash('sha256'));
260
- tree.insert(1, Buffer.from('a'));
261
- tree.insert(4, Buffer.from('b'));
262
- tree.insert(3, Buffer.from('c'));
263
- tree.insert(5, Buffer.from('d'));
264
- const proof = tree.membershipProof(3);
265
- const rightHash = Buffer.from('XmV/9hWNPiptI+KlI5F6IwWs7pQjNl4mhpXEt7iRn0w=', 'base64');
266
- assert.equal(proof.length, 3);
267
- proof.forEach((el) => assert.equal(Array.isArray(el) && el.length, 2));
268
- assert.deepEqual(proof[0], [Buffer.from('c'), 3]);
269
- assert.deepEqual(proof[1], [Buffer.from('a'), 'L']);
270
- assert.deepEqual(proof[2], [rightHash, 'R']);
271
- const leftHash = genNodeHash(Buffer.from('a'), Buffer.from('c'));
272
- const rootHash = genNodeHash(leftHash, rightHash);
273
- const root = tree.getRoot();
274
- assert.ok(root);
275
- assert.deepEqual(rootHash, root && root.hash);
276
- });
277
- await test('proof: Prove that 5 is a member of the tree (boundary)', async (t) => {
278
- const tree = createTree(() => createHash('sha256'));
279
- tree.insert(1, Buffer.from('a'));
280
- tree.insert(4, Buffer.from('b'));
281
- tree.insert(3, Buffer.from('c'));
282
- tree.insert(5, Buffer.from('d'));
283
- const proof = tree.membershipProof(5);
284
- const leftHash = genNodeHash(Buffer.from('a'), Buffer.from('c'));
285
- assert.equal(proof.length, 3);
286
- proof.forEach((el) => assert.equal(Array.isArray(el) && el.length, 2));
287
- assert.deepEqual(proof[0], [Buffer.from('d'), 5]);
288
- assert.deepEqual(proof[1], [Buffer.from('b'), 'L']);
289
- assert.deepEqual(proof[2], [leftHash, 'L']);
290
- const rightHash = genNodeHash(Buffer.from('b'), Buffer.from('d'));
291
- const rootHash = genNodeHash(leftHash, rightHash);
292
- const root = tree.getRoot();
293
- assert.ok(root);
294
- assert.deepEqual(rootHash, root && root.hash);
295
- });
296
- await test('proof: Show a proof that 6 is greater than the greatest key in the tree (5)', async (t) => {
297
- const tree = createTree(() => createHash('sha256'));
298
- tree.insert(1, Buffer.from('a'));
299
- tree.insert(3, Buffer.from('b'));
300
- tree.insert(4, Buffer.from('c'));
301
- tree.insert(5, Buffer.from('d'));
302
- const proof = tree.membershipProof(6);
303
- assert.equal(proof.length, 4);
304
- const [d, c, ab, miss] = proof;
305
- assert.equal(Array.isArray(d) && d.length, 2);
306
- assert.deepEqual(d[0], Buffer.from('d'));
307
- assert.equal(d[1], 5);
308
- assert.equal(Array.isArray(c) && c.length, 2);
309
- assert.deepEqual(c[0], Buffer.from('c'));
310
- assert.equal(c[1], 'L');
311
- assert.equal(Array.isArray(ab) && ab.length, 2);
312
- assert.deepEqual(ab[0], genNodeHash(Buffer.from('a'), Buffer.from('b')));
313
- assert.equal(ab[1], 'L');
314
- assert.ok(!miss);
315
- });
316
- await test('proof: Show a proof that 10 is greater than the greatest key in the tree (5)', async (t) => {
317
- const tree = createTree(() => createHash('sha256'));
318
- tree.insert(1, Buffer.from('a'));
319
- tree.insert(3, Buffer.from('b'));
320
- tree.insert(4, Buffer.from('c'));
321
- tree.insert(5, Buffer.from('d'));
322
- const proof = tree.membershipProof(10);
323
- assert.equal(proof.length, 4);
324
- const [d, c, ab, miss] = proof;
325
- assert.equal(Array.isArray(d) && d.length, 2);
326
- assert.deepEqual(d[0], Buffer.from('d'));
327
- assert.equal(d[1], 5);
328
- assert.equal(Array.isArray(c) && c.length, 2);
329
- assert.deepEqual(c[0], Buffer.from('c'));
330
- assert.equal(c[1], 'L');
331
- assert.equal(Array.isArray(ab) && ab.length, 2);
332
- assert.deepEqual(ab[0], genNodeHash(Buffer.from('a'), Buffer.from('b')));
333
- assert.equal(ab[1], 'L');
334
- assert.ok(!miss);
335
- });
336
- await test('proof: Show a proof that 1 is smaller than the smallest key in the tree (2)', async (t) => {
337
- const tree = createTree(() => createHash('sha256'));
338
- tree.insert(2, Buffer.from('a'));
339
- tree.insert(3, Buffer.from('b'));
340
- tree.insert(4, Buffer.from('c'));
341
- tree.insert(5, Buffer.from('d'));
342
- const proof = tree.membershipProof(1);
343
- assert.equal(proof.length, 4);
344
- const expectedProof = [
345
- null,
346
- [Buffer.from('a'), 2],
347
- [Buffer.from('b'), 'R'],
348
- [genNodeHash(Buffer.from('c'), Buffer.from('d')), 'R'],
349
- ];
350
- assert.deepEqual(proof, expectedProof);
351
- });
352
- await test('search', async (t) => {
353
- const tree = createTree(() => createHash('sha256'));
354
- tree.insert(2, Buffer.from('a'));
355
- tree.insert(3, Buffer.from('b'));
356
- tree.insert(4, Buffer.from('c'));
357
- tree.insert(5, Buffer.from('d'));
358
- equal(tree.search(1), null);
359
- equal(tree.search(10), null);
360
- equal(tree.search(2)?.key, 2);
361
- equal(tree.search(3)?.key, 3);
362
- equal(tree.search(4)?.key, 4);
363
- equal(tree.search(5)?.key, 5);
364
- });
365
- //# sourceMappingURL=csmt.js.map