@based/db 0.0.70 → 0.1.0

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 (263) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +105 -77
  3. package/dist/lib/darwin_aarch64/include/libdeflate.h +23 -0
  4. package/dist/lib/darwin_aarch64/include/selva/db.h +0 -41
  5. package/dist/lib/darwin_aarch64/include/selva/fast_linear_search.h +6 -2
  6. package/dist/lib/darwin_aarch64/include/selva/fields.h +52 -37
  7. package/dist/lib/darwin_aarch64/include/selva/gmtime.h +137 -0
  8. package/dist/lib/darwin_aarch64/include/selva/hll.h +1 -1
  9. package/dist/lib/darwin_aarch64/include/selva/mblen.h +40 -0
  10. package/dist/lib/darwin_aarch64/include/selva/selva_string.h +8 -5
  11. package/dist/lib/darwin_aarch64/include/selva/thread.h +37 -0
  12. package/dist/lib/darwin_aarch64/include/selva/types.h +18 -4
  13. package/dist/lib/darwin_aarch64/libdeflate.dylib +0 -0
  14. package/dist/lib/darwin_aarch64/libjemalloc_selva.2.dylib +0 -0
  15. package/dist/lib/darwin_aarch64/libnode-v22.node +0 -0
  16. package/dist/lib/darwin_aarch64/libnode-v23.node +0 -0
  17. package/dist/lib/darwin_aarch64/libnode-v24.node +0 -0
  18. package/dist/lib/darwin_aarch64/libselva.dylib +0 -0
  19. package/dist/lib/darwin_aarch64/libxxhash.dylib +0 -0
  20. package/dist/lib/linux_aarch64/include/libdeflate.h +23 -0
  21. package/dist/lib/linux_aarch64/include/selva/db.h +0 -41
  22. package/dist/lib/linux_aarch64/include/selva/fast_linear_search.h +6 -2
  23. package/dist/lib/linux_aarch64/include/selva/fields.h +52 -37
  24. package/dist/lib/linux_aarch64/include/selva/gmtime.h +137 -0
  25. package/dist/lib/linux_aarch64/include/selva/hll.h +1 -1
  26. package/dist/lib/linux_aarch64/include/selva/mblen.h +40 -0
  27. package/dist/lib/linux_aarch64/include/selva/selva_string.h +8 -5
  28. package/dist/lib/linux_aarch64/include/selva/thread.h +37 -0
  29. package/dist/lib/linux_aarch64/include/selva/types.h +18 -4
  30. package/dist/lib/linux_aarch64/libdeflate.so +0 -0
  31. package/dist/lib/linux_aarch64/libnode-v22.node +0 -0
  32. package/dist/lib/linux_aarch64/libnode-v23.node +0 -0
  33. package/dist/lib/linux_aarch64/libnode-v24.node +0 -0
  34. package/dist/lib/linux_aarch64/libselva.so +0 -0
  35. package/dist/lib/linux_x86_64/include/libdeflate.h +23 -0
  36. package/dist/lib/linux_x86_64/include/selva/db.h +0 -41
  37. package/dist/lib/linux_x86_64/include/selva/fast_linear_search.h +6 -2
  38. package/dist/lib/linux_x86_64/include/selva/fields.h +52 -37
  39. package/dist/lib/linux_x86_64/include/selva/gmtime.h +137 -0
  40. package/dist/lib/linux_x86_64/include/selva/hll.h +1 -1
  41. package/dist/lib/linux_x86_64/include/selva/mblen.h +40 -0
  42. package/dist/lib/linux_x86_64/include/selva/selva_string.h +8 -5
  43. package/dist/lib/linux_x86_64/include/selva/thread.h +37 -0
  44. package/dist/lib/linux_x86_64/include/selva/types.h +18 -4
  45. package/dist/lib/linux_x86_64/libdeflate.so +0 -0
  46. package/dist/lib/linux_x86_64/libnode-v22.node +0 -0
  47. package/dist/lib/linux_x86_64/libnode-v23.node +0 -0
  48. package/dist/lib/linux_x86_64/libnode-v24.node +0 -0
  49. package/dist/lib/linux_x86_64/libselva.so +0 -0
  50. package/dist/src/client/index.d.ts +16 -21
  51. package/dist/src/client/index.js +48 -59
  52. package/dist/src/client/modify/Ctx.d.ts +38 -0
  53. package/dist/src/client/modify/Ctx.js +30 -0
  54. package/dist/src/client/modify/Tmp.d.ts +19 -0
  55. package/dist/src/client/modify/Tmp.js +67 -0
  56. package/dist/src/client/modify/create/index.d.ts +6 -0
  57. package/dist/src/client/modify/create/index.js +191 -0
  58. package/dist/src/client/modify/create/mark.d.ts +7 -0
  59. package/dist/src/client/modify/create/mark.js +42 -0
  60. package/dist/src/client/modify/cursor.d.ts +10 -0
  61. package/dist/src/client/modify/cursor.js +48 -0
  62. package/dist/src/client/modify/delete/index.d.ts +2 -0
  63. package/dist/src/client/modify/delete/index.js +39 -0
  64. package/dist/src/client/modify/drain.d.ts +7 -0
  65. package/dist/src/client/modify/drain.js +77 -0
  66. package/dist/src/client/modify/edges/binary.d.ts +3 -0
  67. package/dist/src/client/modify/edges/binary.js +28 -0
  68. package/dist/src/client/modify/edges/cardinality.d.ts +3 -0
  69. package/dist/src/client/modify/edges/cardinality.js +15 -0
  70. package/dist/src/client/modify/edges/header.d.ts +5 -0
  71. package/dist/src/client/modify/edges/header.js +21 -0
  72. package/dist/src/client/modify/edges/index.d.ts +3 -0
  73. package/dist/src/client/modify/edges/index.js +128 -0
  74. package/dist/src/client/modify/edges/reference.d.ts +3 -0
  75. package/dist/src/client/modify/edges/reference.js +31 -0
  76. package/dist/src/client/modify/edges/references.d.ts +3 -0
  77. package/dist/src/client/modify/edges/references.js +38 -0
  78. package/dist/src/client/modify/edges/separate.d.ts +3 -0
  79. package/dist/src/client/modify/edges/separate.js +24 -0
  80. package/dist/src/client/modify/edges/string.d.ts +3 -0
  81. package/dist/src/client/modify/edges/string.js +30 -0
  82. package/dist/src/client/modify/error.d.ts +7 -0
  83. package/dist/src/client/modify/error.js +68 -0
  84. package/dist/src/client/modify/expire/index.d.ts +2 -0
  85. package/dist/src/client/modify/expire/index.js +31 -0
  86. package/dist/src/client/modify/props/alias.d.ts +3 -0
  87. package/dist/src/client/modify/props/alias.js +26 -0
  88. package/dist/src/client/modify/props/binary.d.ts +5 -0
  89. package/dist/src/client/modify/props/binary.js +52 -0
  90. package/dist/src/client/modify/props/cardinality.d.ts +4 -0
  91. package/dist/src/client/modify/props/cardinality.js +46 -0
  92. package/dist/src/client/modify/props/delete.d.ts +3 -0
  93. package/dist/src/client/modify/props/delete.js +13 -0
  94. package/dist/src/client/modify/props/fixed.d.ts +4 -0
  95. package/dist/src/client/modify/props/fixed.js +105 -0
  96. package/dist/src/client/modify/props/increment.d.ts +3 -0
  97. package/dist/src/client/modify/props/increment.js +28 -0
  98. package/dist/src/client/modify/props/json.d.ts +3 -0
  99. package/dist/src/client/modify/props/json.js +5 -0
  100. package/dist/src/client/modify/props/main.d.ts +4 -0
  101. package/dist/src/client/modify/props/main.js +22 -0
  102. package/dist/src/client/modify/props/object.d.ts +3 -0
  103. package/dist/src/client/modify/props/object.js +37 -0
  104. package/dist/src/client/modify/props/reference.d.ts +6 -0
  105. package/dist/src/client/modify/props/reference.js +92 -0
  106. package/dist/src/client/modify/props/references.d.ts +3 -0
  107. package/dist/src/client/modify/props/references.js +231 -0
  108. package/dist/src/client/modify/props/separate.d.ts +3 -0
  109. package/dist/src/client/modify/props/separate.js +43 -0
  110. package/dist/src/client/modify/props/string.d.ts +5 -0
  111. package/dist/src/client/modify/props/string.js +51 -0
  112. package/dist/src/client/modify/props/text.d.ts +3 -0
  113. package/dist/src/client/modify/props/text.js +35 -0
  114. package/dist/src/client/modify/props/vector.d.ts +3 -0
  115. package/dist/src/client/modify/props/vector.js +30 -0
  116. package/dist/src/client/modify/resize.d.ts +3 -0
  117. package/dist/src/client/modify/resize.js +20 -0
  118. package/dist/src/client/modify/types.d.ts +3 -4
  119. package/dist/src/client/modify/types.js +2 -1
  120. package/dist/src/client/modify/uint.d.ts +7 -0
  121. package/dist/src/client/modify/uint.js +27 -0
  122. package/dist/src/client/modify/update/index.d.ts +3 -0
  123. package/dist/src/client/modify/update/index.js +75 -0
  124. package/dist/src/client/modify/upsert/index.d.ts +3 -0
  125. package/dist/src/client/modify/{upsert.js → upsert/index.js} +4 -4
  126. package/dist/src/client/modify/validate.d.ts +6 -0
  127. package/dist/src/client/modify/validate.js +24 -0
  128. package/dist/src/client/query/BasedDbQuery.d.ts +18 -15
  129. package/dist/src/client/query/BasedDbQuery.js +93 -96
  130. package/dist/src/client/query/{BasedIterable.d.ts → BasedQueryResponse.d.ts} +5 -4
  131. package/dist/src/client/query/{BasedIterable.js → BasedQueryResponse.js} +15 -10
  132. package/dist/src/client/query/aggregates/aggregation.d.ts +5 -3
  133. package/dist/src/client/query/aggregates/aggregation.js +105 -48
  134. package/dist/src/client/query/aggregates/types.d.ts +34 -12
  135. package/dist/src/client/query/aggregates/types.js +30 -12
  136. package/dist/src/client/query/debug.js +1 -1
  137. package/dist/src/client/query/display.d.ts +1 -1
  138. package/dist/src/client/query/display.js +21 -4
  139. package/dist/src/client/query/filter/FilterBranch.js +2 -2
  140. package/dist/src/client/query/filter/convertFilter.d.ts +3 -2
  141. package/dist/src/client/query/filter/convertFilter.js +13 -1
  142. package/dist/src/client/query/filter/createFixedFilterBuffer.js +16 -30
  143. package/dist/src/client/query/filter/createReferenceFilter.js +6 -20
  144. package/dist/src/client/query/filter/createVariableFilterBuffer.js +15 -32
  145. package/dist/src/client/query/filter/parseFilterValue.js +3 -11
  146. package/dist/src/client/query/filter/primitiveFilter.js +1 -1
  147. package/dist/src/client/query/filter/toBuffer.js +9 -15
  148. package/dist/src/client/query/filter/types.d.ts +6 -6
  149. package/dist/src/client/query/filter/types.js +8 -8
  150. package/dist/src/client/query/include/include.d.ts +3 -0
  151. package/dist/src/client/query/include/include.js +58 -0
  152. package/dist/src/client/query/include/props.d.ts +7 -7
  153. package/dist/src/client/query/include/props.js +26 -21
  154. package/dist/src/client/query/include/toByteCode.js +188 -0
  155. package/dist/src/client/query/include/utils.d.ts +3 -1
  156. package/dist/src/client/query/include/utils.js +13 -0
  157. package/dist/src/client/query/include/walk.d.ts +2 -2
  158. package/dist/src/client/query/include/walk.js +38 -23
  159. package/dist/src/client/query/query.d.ts +2 -3
  160. package/dist/src/client/query/query.js +2 -3
  161. package/dist/src/client/query/queryDef.d.ts +4 -2
  162. package/dist/src/client/query/queryDef.js +3 -5
  163. package/dist/src/client/query/queryDefToReadSchema.d.ts +3 -0
  164. package/dist/src/client/query/queryDefToReadSchema.js +126 -0
  165. package/dist/src/client/query/registerQuery.js +15 -4
  166. package/dist/src/client/query/search/index.d.ts +2 -1
  167. package/dist/src/client/query/search/index.js +9 -2
  168. package/dist/src/client/query/sort.js +3 -0
  169. package/dist/src/client/query/subscription/index.d.ts +1 -1
  170. package/dist/src/client/query/subscription/index.js +2 -2
  171. package/dist/src/client/query/subscription/types.d.ts +1 -1
  172. package/dist/src/client/query/thresholds.d.ts +1 -1
  173. package/dist/src/client/query/thresholds.js +1 -1
  174. package/dist/src/client/query/toByteCode/{toBuffer.js → toByteCode.js} +8 -8
  175. package/dist/src/client/query/types.d.ts +40 -25
  176. package/dist/src/client/query/types.js +2 -6
  177. package/dist/src/client/query/validation.d.ts +6 -0
  178. package/dist/src/client/query/validation.js +32 -8
  179. package/dist/src/client/setLocalClientSchema.js +6 -10
  180. package/dist/src/client/string.d.ts +3 -7
  181. package/dist/src/client/string.js +18 -47
  182. package/dist/src/hooks.d.ts +2 -3
  183. package/dist/src/hooks.js +14 -9
  184. package/dist/src/index.d.ts +3 -5
  185. package/dist/src/index.js +4 -6
  186. package/dist/src/native.d.ts +3 -2
  187. package/dist/src/native.js +9 -8
  188. package/dist/src/server/IoWorker.js +2 -3
  189. package/dist/src/server/QueryWorker.js +1 -1
  190. package/dist/src/server/blocks.js +5 -4
  191. package/dist/src/server/dbHash.js +1 -1
  192. package/dist/src/server/index.d.ts +4 -6
  193. package/dist/src/server/index.js +63 -96
  194. package/dist/src/server/migrate/index.d.ts +2 -4
  195. package/dist/src/server/migrate/index.js +31 -16
  196. package/dist/src/server/migrate/worker.js +2 -27
  197. package/dist/src/server/save.js +10 -8
  198. package/dist/src/server/schema.js +17 -25
  199. package/dist/src/server/start.d.ts +1 -0
  200. package/dist/src/server/start.js +18 -10
  201. package/dist/src/server/tree.d.ts +20 -0
  202. package/dist/src/server/tree.js +17 -2
  203. package/dist/src/server/workers/DbWorker.d.ts +1 -0
  204. package/dist/src/server/workers/DbWorker.js +8 -1
  205. package/dist/src/server/workers/io_worker.js +1 -1
  206. package/dist/src/server/workers/worker.js +9 -4
  207. package/dist/src/table.d.ts +4 -0
  208. package/dist/src/table.js +97 -0
  209. package/dist/src/types.d.ts +1 -1
  210. package/package.json +18 -17
  211. package/dist/lib/darwin_aarch64/include/selva/worker_ctx.h +0 -29
  212. package/dist/lib/linux_aarch64/include/selva/worker_ctx.h +0 -29
  213. package/dist/lib/linux_x86_64/include/selva/worker_ctx.h +0 -29
  214. package/dist/src/client/flushModify.d.ts +0 -36
  215. package/dist/src/client/flushModify.js +0 -197
  216. package/dist/src/client/modify/ModifyRes.d.ts +0 -23
  217. package/dist/src/client/modify/ModifyRes.js +0 -101
  218. package/dist/src/client/modify/alias.d.ts +0 -4
  219. package/dist/src/client/modify/alias.js +0 -57
  220. package/dist/src/client/modify/binary.d.ts +0 -6
  221. package/dist/src/client/modify/binary.js +0 -80
  222. package/dist/src/client/modify/cardinality.d.ts +0 -6
  223. package/dist/src/client/modify/cardinality.js +0 -63
  224. package/dist/src/client/modify/create.d.ts +0 -5
  225. package/dist/src/client/modify/create.js +0 -228
  226. package/dist/src/client/modify/delete.d.ts +0 -4
  227. package/dist/src/client/modify/delete.js +0 -47
  228. package/dist/src/client/modify/expire.d.ts +0 -3
  229. package/dist/src/client/modify/expire.js +0 -25
  230. package/dist/src/client/modify/fixed.d.ts +0 -5
  231. package/dist/src/client/modify/fixed.js +0 -235
  232. package/dist/src/client/modify/index.d.ts +0 -4
  233. package/dist/src/client/modify/index.js +0 -4
  234. package/dist/src/client/modify/json.d.ts +0 -4
  235. package/dist/src/client/modify/json.js +0 -26
  236. package/dist/src/client/modify/modify.d.ts +0 -5
  237. package/dist/src/client/modify/modify.js +0 -134
  238. package/dist/src/client/modify/references/appendEdgeRefs.d.ts +0 -4
  239. package/dist/src/client/modify/references/appendEdgeRefs.js +0 -33
  240. package/dist/src/client/modify/references/edge.d.ts +0 -5
  241. package/dist/src/client/modify/references/edge.js +0 -322
  242. package/dist/src/client/modify/references/getEdgeSize.d.ts +0 -3
  243. package/dist/src/client/modify/references/getEdgeSize.js +0 -27
  244. package/dist/src/client/modify/references/reference.d.ts +0 -11
  245. package/dist/src/client/modify/references/reference.js +0 -112
  246. package/dist/src/client/modify/references/references.d.ts +0 -16
  247. package/dist/src/client/modify/references/references.js +0 -308
  248. package/dist/src/client/modify/setCursor.d.ts +0 -5
  249. package/dist/src/client/modify/setCursor.js +0 -33
  250. package/dist/src/client/modify/string.d.ts +0 -5
  251. package/dist/src/client/modify/string.js +0 -71
  252. package/dist/src/client/modify/text.d.ts +0 -8
  253. package/dist/src/client/modify/text.js +0 -69
  254. package/dist/src/client/modify/update.d.ts +0 -6
  255. package/dist/src/client/modify/update.js +0 -90
  256. package/dist/src/client/modify/upsert.d.ts +0 -3
  257. package/dist/src/client/modify/vector.d.ts +0 -4
  258. package/dist/src/client/modify/vector.js +0 -53
  259. package/dist/src/client/query/include/toBuffer.js +0 -123
  260. package/dist/src/client/query/read/read.d.ts +0 -9
  261. package/dist/src/client/query/read/read.js +0 -483
  262. /package/dist/src/client/query/include/{toBuffer.d.ts → toByteCode.d.ts} +0 -0
  263. /package/dist/src/client/query/toByteCode/{toBuffer.d.ts → toByteCode.d.ts} +0 -0
@@ -1,123 +0,0 @@
1
- import { QueryDefType } from '../types.js';
2
- import { walkDefs } from './walk.js';
3
- const EMPTY_BUFFER = new Uint8Array(0);
4
- export const includeToBuffer = (db, def) => {
5
- const result = [];
6
- if (!def.include.stringFields.size &&
7
- !def.include.props.size &&
8
- !def.references.size &&
9
- !def.include.main.len &&
10
- !def.include.langTextFields.size) {
11
- return result;
12
- }
13
- let mainBuffer;
14
- let len = 0;
15
- let includeBuffer;
16
- if (def.include.stringFields) {
17
- for (const f of def.include.stringFields) {
18
- walkDefs(db, def, f);
19
- }
20
- }
21
- if (def.include.main.len > 0) {
22
- // if (def.target.)
23
- const len = def.type === QueryDefType.Edge
24
- ? def.target.ref.edgeMainLen
25
- : def.schema.mainLen;
26
- if (def.include.main.len === len) {
27
- // GET ALL MAIN FIELDS
28
- let m = 0;
29
- for (const key in def.include.main.include) {
30
- const v = def.include.main.include[key];
31
- const len = v[1].len;
32
- v[0] = m;
33
- m += len;
34
- }
35
- mainBuffer = EMPTY_BUFFER;
36
- }
37
- else {
38
- // GET SOME MAIN FIELDS
39
- const size = Object.keys(def.include.main.include).length;
40
- mainBuffer = new Uint8Array(size * 4 + 2);
41
- mainBuffer[0] = def.include.main.len;
42
- mainBuffer[1] = def.include.main.len >>> 8;
43
- let i = 2;
44
- let m = 0;
45
- for (const key in def.include.main.include) {
46
- const v = def.include.main.include[key];
47
- mainBuffer[i] = v[1].start;
48
- mainBuffer[i + 1] = v[1].start >>> 8;
49
- const len = v[1].len;
50
- v[0] = m;
51
- mainBuffer[i + 2] = len;
52
- mainBuffer[i + 3] = len >>> 8;
53
- i += 4;
54
- m += len;
55
- }
56
- }
57
- }
58
- if (def.include.langTextFields.size) {
59
- for (const [prop, { codes, def: propDef, fallBacks },] of def.include.langTextFields.entries()) {
60
- def.include.propsRead[prop] = 0;
61
- if (codes.has(0)) {
62
- const b = new Uint8Array(4);
63
- b[0] = prop;
64
- b[1] = propDef.typeIndex;
65
- b[2] = 0;
66
- b[3] = 0;
67
- result.push(b);
68
- }
69
- else {
70
- for (const code of codes) {
71
- const fallBackSize = fallBacks.length;
72
- const b = new Uint8Array(4 + fallBackSize);
73
- b[0] = prop;
74
- b[1] = propDef.typeIndex;
75
- b[2] = code;
76
- b[3] = fallBackSize;
77
- let i = 0;
78
- for (const fallback of fallBacks) {
79
- b[i + 4] = fallback;
80
- i++;
81
- }
82
- result.push(b);
83
- }
84
- }
85
- }
86
- }
87
- const propSize = def.include.props.size ?? 0;
88
- if (mainBuffer) {
89
- len = mainBuffer.byteLength + 3 + propSize * 2;
90
- includeBuffer = new Uint8Array(len);
91
- includeBuffer[0] = 0;
92
- includeBuffer[1] = mainBuffer.byteLength;
93
- includeBuffer[2] = mainBuffer.byteLength >>> 8;
94
- const offset = 3 + mainBuffer.byteLength;
95
- includeBuffer.set(mainBuffer, 3);
96
- if (propSize) {
97
- let i = 0;
98
- for (const [prop, propDef] of def.include.props.entries()) {
99
- includeBuffer[i + offset] = prop;
100
- includeBuffer[i + offset + 1] = propDef.typeIndex;
101
- i += 2;
102
- }
103
- }
104
- }
105
- else if (propSize) {
106
- const buf = new Uint8Array(propSize * 2);
107
- let i = 0;
108
- for (const [prop, propDef] of def.include.props.entries()) {
109
- buf[i] = prop;
110
- buf[i + 1] = propDef.typeIndex;
111
- i += 2;
112
- }
113
- includeBuffer = buf;
114
- }
115
- if (includeBuffer) {
116
- def.include.props.forEach((v, k) => {
117
- def.include.propsRead[k] = 0;
118
- });
119
- result.push(includeBuffer);
120
- }
121
- return result;
122
- };
123
- //# sourceMappingURL=toBuffer.js.map
@@ -1,9 +0,0 @@
1
- import { QueryDef } from '../types.js';
2
- export type Item = {
3
- id: number;
4
- } & {
5
- [key: string]: any;
6
- };
7
- export type AggItem = Partial<Item>;
8
- export declare const readAllFields: (q: QueryDef, result: Uint8Array, offset: number, end: number, item: Item, id: number) => number;
9
- export declare const resultToObject: (q: QueryDef, result: Uint8Array, end: number, offset?: number) => any;
@@ -1,483 +0,0 @@
1
- import { ALIAS, ALIASES, BINARY, BOOLEAN, ENUM, INT16, INT32, INT8, NUMBER, STRING, TEXT, TIMESTAMP, UINT16, UINT32, UINT8, VECTOR, JSON, CARDINALITY, COLVEC, } from '@based/schema/def';
2
- import { QueryDefType } from '../types.js';
3
- import { read, readUtf8 } from '../../string.js';
4
- import { DECODER, readDoubleLE, readFloatLE, readInt16, readInt32, readUint16, readUint32, setByPath, } from '@saulx/utils';
5
- import { inverseLangMap } from '@based/schema';
6
- import { READ_EDGE, READ_ID, READ_REFERENCE, READ_REFERENCES, READ_AGGREGATION, } from '../types.js';
7
- import { AggregateType } from '../aggregates/types.js';
8
- const readAggregate = (q, result, offset, len) => {
9
- const results = {};
10
- if (q.aggregate.groupBy) {
11
- let i = offset;
12
- while (i < len) {
13
- let key = '';
14
- let keyLen = 0;
15
- if (result[i] == 0) {
16
- if (q.aggregate.groupBy.default) {
17
- key = q.aggregate.groupBy.default;
18
- }
19
- else {
20
- key = `$undefined`;
21
- }
22
- i += 2;
23
- }
24
- else {
25
- if (q.aggregate.groupBy.typeIndex == ENUM) {
26
- i += 2;
27
- key = q.aggregate.groupBy.enum[result[i] - 1];
28
- i++;
29
- }
30
- else {
31
- keyLen = readUint16(result, i);
32
- i += 2;
33
- key = DECODER.decode(result.subarray(i, i + keyLen));
34
- i += keyLen;
35
- }
36
- }
37
- const resultKey = (results[key] = {});
38
- for (const aggregatesArray of q.aggregate.aggregates.values()) {
39
- for (const agg of aggregatesArray) {
40
- var val = undefined;
41
- if (agg.type === AggregateType.CARDINALITY ||
42
- agg.type === AggregateType.COUNT) {
43
- val = readUint32(result, agg.resultPos + i);
44
- }
45
- else {
46
- val = readDoubleLE(result, agg.resultPos + i);
47
- }
48
- setByPath(resultKey, agg.propDef.path, val);
49
- }
50
- }
51
- i += q.aggregate.totalResultsSize;
52
- }
53
- }
54
- else {
55
- for (const aggregatesArray of q.aggregate.aggregates.values()) {
56
- for (const agg of aggregatesArray) {
57
- var val = undefined;
58
- if (agg.type === AggregateType.CARDINALITY ||
59
- agg.type === AggregateType.COUNT) {
60
- val = readUint32(result, agg.resultPos + offset);
61
- }
62
- else {
63
- val = readDoubleLE(result, agg.resultPos + offset);
64
- }
65
- setByPath(results, agg.propDef.path, val);
66
- }
67
- }
68
- }
69
- return results;
70
- };
71
- const addField = (p, value, item, defaultOnly = false, lang = 0) => {
72
- if (p.transform) {
73
- value = p.transform('read', value);
74
- }
75
- let i = p.__isEdge === true ? 1 : 0;
76
- // TODO OPTMIZE
77
- const path = lang ? [...p.path, inverseLangMap.get(lang)] : p.path;
78
- const len = path.length;
79
- if (len - i === 1) {
80
- const field = path[i];
81
- if (!defaultOnly || !(field in item)) {
82
- item[field] = value;
83
- }
84
- }
85
- else {
86
- let select = item;
87
- for (; i < len; i++) {
88
- const field = path[i];
89
- if (i === len - 1) {
90
- if (!defaultOnly || !(field in select)) {
91
- select[field] = value;
92
- }
93
- }
94
- else {
95
- select = select[field] ?? (select[field] = {});
96
- }
97
- }
98
- }
99
- };
100
- const getEmptyField = (p, item) => {
101
- let i = p.__isEdge === true ? 1 : 0;
102
- const path = p.path;
103
- const len = path.length;
104
- let select = item;
105
- if (len - i === 1) {
106
- const field = path[i];
107
- if (!(field in item)) {
108
- select = item[field] = {};
109
- }
110
- else {
111
- return item[field];
112
- }
113
- }
114
- else {
115
- for (; i < len; i++) {
116
- const field = path[i];
117
- select = select[field] ?? (select[field] = {});
118
- }
119
- }
120
- return select;
121
- };
122
- const readMainValue = (prop, result, index, item) => {
123
- if (prop.typeIndex === TIMESTAMP || prop.typeIndex === NUMBER) {
124
- addField(prop, readDoubleLE(result, index), item);
125
- }
126
- else if (prop.typeIndex === UINT32) {
127
- addField(prop, readUint32(result, index), item);
128
- }
129
- else if (prop.typeIndex === BOOLEAN) {
130
- addField(prop, Boolean(result[index]), item);
131
- }
132
- else if (prop.typeIndex === ENUM) {
133
- if (result[index] === 0) {
134
- addField(prop, undefined, item);
135
- }
136
- else {
137
- addField(prop, prop.enum[result[index] - 1], item);
138
- }
139
- }
140
- else if (prop.typeIndex === STRING) {
141
- const len = result[index];
142
- if (len !== 0) {
143
- const str = readUtf8(result, index + 1, len);
144
- addField(prop, str, item);
145
- }
146
- else {
147
- addField(prop, '', item);
148
- }
149
- }
150
- else if (prop.typeIndex === JSON) {
151
- addField(prop, global.JSON.parse(readUtf8(result, index + 1, index + 1 + result[index])), item);
152
- }
153
- else if (prop.typeIndex === BINARY) {
154
- addField(prop, result.subarray(index + 1, index + 1 + result[index]), item);
155
- }
156
- else if (prop.typeIndex === INT8) {
157
- const signedVal = (result[index] << 24) >> 24;
158
- addField(prop, signedVal, item);
159
- }
160
- else if (prop.typeIndex === UINT8) {
161
- addField(prop, result[index], item);
162
- }
163
- else if (prop.typeIndex === INT16) {
164
- addField(prop, readInt16(result, index), item);
165
- }
166
- else if (prop.typeIndex === UINT16) {
167
- addField(prop, readUint16(result, index), item);
168
- }
169
- else if (prop.typeIndex === INT32) {
170
- addField(prop, readInt32(result, index), item);
171
- }
172
- };
173
- const readMain = (q, result, offset, item) => {
174
- const mainInclude = q.include.main;
175
- let i = offset;
176
- const isEdge = q.type === QueryDefType.Edge;
177
- const main = isEdge ? q.target.ref.reverseMainEdges : q.schema.main;
178
- const len = isEdge ? q.target.ref.edgeMainLen : q.schema.mainLen;
179
- if (mainInclude.len === len) {
180
- for (const start in main) {
181
- readMainValue(main[start], result, Number(start) + i, item);
182
- }
183
- i += len;
184
- }
185
- else {
186
- for (const k in mainInclude.include) {
187
- const [index, prop] = mainInclude.include[k];
188
- readMainValue(prop, result, index + i, item);
189
- }
190
- i += mainInclude.len;
191
- }
192
- return i - offset;
193
- };
194
- const handleUndefinedProps = (id, q, item) => {
195
- for (const k in q.include.propsRead) {
196
- if (q.include.propsRead[k] !== id) {
197
- // Only relevant for seperate props
198
- const prop = q.schema.reverseProps[k];
199
- if (prop.typeIndex === CARDINALITY) {
200
- addField(prop, 0, item);
201
- }
202
- else if (prop.typeIndex === TEXT && q.lang.lang == 0) {
203
- const lan = getEmptyField(prop, item);
204
- const lang = q.include.langTextFields.get(prop.prop).codes;
205
- if (lang.has(0)) {
206
- for (const locale in q.schema.locales) {
207
- if (lan[locale] == undefined) {
208
- lan[locale] = '';
209
- }
210
- }
211
- }
212
- else {
213
- for (const code of lang) {
214
- const locale = inverseLangMap.get(code);
215
- if (!lan[locale]) {
216
- lan[locale] = '';
217
- }
218
- }
219
- }
220
- }
221
- else if (prop.typeIndex === TEXT ||
222
- prop.typeIndex === STRING ||
223
- prop.typeIndex === ALIAS) {
224
- addField(prop, '', item);
225
- }
226
- else if (prop.typeIndex === JSON) {
227
- addField(prop, null, item);
228
- }
229
- else if (prop.typeIndex === BINARY) {
230
- addField(prop, new Uint8Array(), item);
231
- }
232
- }
233
- }
234
- };
235
- export const readAllFields = (q, result, offset, end, item, id) => {
236
- let i = offset;
237
- while (i < end) {
238
- const index = result[i];
239
- i++;
240
- if (index === READ_ID) {
241
- handleUndefinedProps(id, q, item);
242
- return i - offset;
243
- }
244
- if (index === READ_AGGREGATION) {
245
- // also for edges at some point!
246
- let field = result[i];
247
- i++;
248
- const size = readUint32(result, i);
249
- i += 4;
250
- const ref = q.references.get(field);
251
- addField(
252
- // @ts-ignore
253
- ref.target.propDef, readAggregate(ref, result, i, i + size), item);
254
- i += size;
255
- }
256
- else if (index === READ_EDGE) {
257
- let prop = result[i];
258
- if (prop === READ_REFERENCE) {
259
- i++;
260
- const field = result[i];
261
- i++;
262
- const size = readUint32(result, i);
263
- i += 4;
264
- const ref = q.edges.references.get(field);
265
- if (size === 0) {
266
- // @ts-ignore
267
- addField(ref.target.propDef, null, item);
268
- i += size;
269
- }
270
- else {
271
- i++;
272
- const id = readUint32(result, i);
273
- i += 4;
274
- const refItem = {
275
- id,
276
- };
277
- readAllFields(ref, result, i, size + i - 5, refItem, id);
278
- // @ts-ignore
279
- addField(ref.target.propDef, refItem, item);
280
- i += size - 5;
281
- }
282
- }
283
- else if (prop === READ_REFERENCES) {
284
- i++;
285
- const field = result[i];
286
- i++;
287
- const ref = q.edges.references.get(field);
288
- const size = readUint32(result, i);
289
- i += 4;
290
- const refs = resultToObject(ref, result, size + i + 4, i);
291
- // @ts-ignore
292
- addField(ref.target.propDef, refs, item);
293
- i += size + 4;
294
- // ----------------
295
- }
296
- else {
297
- i++;
298
- const target = 'ref' in q.edges.target && q.edges.target.ref;
299
- if (prop === 0) {
300
- i += readMain(q.edges, result, i, item);
301
- // i += edgeDef.len
302
- }
303
- else {
304
- const edgeDef = target.reverseSeperateEdges[prop];
305
- const t = edgeDef.typeIndex;
306
- if (t === JSON) {
307
- const size = readUint32(result, i);
308
- addField(edgeDef, global.JSON.parse(read(result, i + 4, size, true)), item);
309
- i += size + 4;
310
- }
311
- else if (t === BINARY) {
312
- const size = readUint32(result, i);
313
- addField(edgeDef, result.subarray(i + 6, size + i + 4), item);
314
- i += size + 4;
315
- }
316
- else if (t === STRING || t === ALIAS || t === ALIASES) {
317
- const size = readUint32(result, i);
318
- if (size === 0) {
319
- addField(edgeDef, '', item);
320
- }
321
- else {
322
- addField(edgeDef, read(result, i + 4, size, true), item);
323
- }
324
- i += size + 4;
325
- }
326
- else if (t === CARDINALITY) {
327
- const size = readUint32(result, i);
328
- addField(edgeDef, readUint32(result, i + 4), item);
329
- i += size + 4;
330
- }
331
- }
332
- }
333
- }
334
- else if (index === READ_REFERENCE) {
335
- const field = result[i];
336
- i++;
337
- const size = readUint32(result, i);
338
- i += 4;
339
- const ref = q.references.get(field);
340
- if (size === 0) {
341
- // @ts-ignore
342
- addField(ref.target.propDef, null, item);
343
- i += size;
344
- }
345
- else {
346
- i++;
347
- let id = readUint32(result, i);
348
- i += 4;
349
- const refItem = {
350
- id,
351
- };
352
- readAllFields(ref, result, i, size + i - 5, refItem, id);
353
- // @ts-ignore
354
- addField(ref.target.propDef, refItem, item);
355
- i += size - 5;
356
- }
357
- }
358
- else if (index === READ_REFERENCES) {
359
- const field = result[i];
360
- i++;
361
- const ref = q.references.get(field);
362
- const size = readUint32(result, i);
363
- i += 4;
364
- const refs = resultToObject(ref, result, size + i + 4, i);
365
- // @ts-ignore
366
- addField(ref.target.propDef, refs, item);
367
- i += size + 4;
368
- }
369
- else if (index === 0) {
370
- i += readMain(q, result, i, item);
371
- }
372
- else {
373
- const prop = q.schema.reverseProps[index];
374
- if (prop.typeIndex === CARDINALITY) {
375
- q.include.propsRead[index] = id;
376
- const size = readUint32(result, i);
377
- addField(prop, readUint32(result, i + 4), item);
378
- i += size + 4;
379
- }
380
- else if (prop.typeIndex === JSON) {
381
- q.include.propsRead[index] = id;
382
- const size = readUint32(result, i);
383
- addField(prop, global.JSON.parse(read(result, i + 4, size, true)), item);
384
- i += size + 4;
385
- }
386
- else if (prop.typeIndex === BINARY) {
387
- q.include.propsRead[index] = id;
388
- const size = readUint32(result, i);
389
- addField(prop, result.subarray(i + 6, i + size + 4), item);
390
- i += size + 4;
391
- }
392
- else if (prop.typeIndex === STRING) {
393
- q.include.propsRead[index] = id;
394
- const size = readUint32(result, i);
395
- if (size === 0) {
396
- addField(prop, '', item);
397
- }
398
- else {
399
- addField(prop, read(result, i + 4, size, true), item);
400
- }
401
- i += size + 4;
402
- }
403
- else if (prop.typeIndex == TEXT) {
404
- const size = readUint32(result, i);
405
- if (size === 0) {
406
- // do nothing
407
- }
408
- else {
409
- if (q.lang.lang != 0) {
410
- q.include.propsRead[index] = id;
411
- addField(prop, read(result, i + 4, size, true), item);
412
- }
413
- else {
414
- addField(prop, read(result, i + 4, size, true), item, false, result[i + 4]);
415
- }
416
- }
417
- i += size + 4;
418
- }
419
- else if (prop.typeIndex === ALIAS) {
420
- q.include.propsRead[index] = id;
421
- const size = readUint32(result, i);
422
- i += 4;
423
- if (size === 0) {
424
- addField(prop, '', item);
425
- }
426
- else {
427
- const string = readUtf8(result, i, size);
428
- i += size;
429
- addField(prop, string, item);
430
- }
431
- }
432
- else if (prop.typeIndex == VECTOR || prop.typeIndex == COLVEC) {
433
- q.include.propsRead[index] = id;
434
- const size = readUint32(result, i);
435
- const arr = new Float32Array(size / 4);
436
- for (let j = 0; j < size; j += 4) {
437
- arr[j / 4] = readFloatLE(result, i + 4 + j);
438
- }
439
- addField(prop, arr, item);
440
- i += size + 4;
441
- }
442
- }
443
- }
444
- handleUndefinedProps(id, q, item);
445
- return i - offset;
446
- };
447
- export const resultToObject = (q, result, end, offset = 0) => {
448
- if (q.aggregate) {
449
- return readAggregate(q, result, 0, result.byteLength - 4);
450
- }
451
- const len = readUint32(result, offset);
452
- if (len === 0) {
453
- if ('id' in q.target || 'alias' in q.target) {
454
- return null;
455
- }
456
- return [];
457
- }
458
- let items = [];
459
- let i = 5 + offset;
460
- while (i < end) {
461
- const id = readUint32(result, i);
462
- i += 4;
463
- let item = {
464
- id,
465
- };
466
- if (q.search) {
467
- item.$searchScore = readFloatLE(result, i);
468
- i += 4;
469
- }
470
- const l = readAllFields(q, result, i, end, item, id);
471
- i += l;
472
- items.push(item);
473
- }
474
- if ('id' in q.target || 'alias' in q.target) {
475
- if (q.type === QueryDefType.Root && q.target.type === '_root') {
476
- // Todo can be optimized
477
- delete items[0].id;
478
- }
479
- return items[0];
480
- }
481
- return items;
482
- };
483
- //# sourceMappingURL=read.js.map