@based/db 0.1.5 → 0.2.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 (120) hide show
  1. package/dist/lib/darwin_aarch64/include/cdefs.h +4 -0
  2. package/dist/lib/darwin_aarch64/include/selva/db.h +25 -5
  3. package/dist/lib/darwin_aarch64/include/selva/fields.h +34 -72
  4. package/dist/lib/darwin_aarch64/include/selva/selva_lang.h +7 -0
  5. package/dist/lib/darwin_aarch64/include/selva/types.h +9 -13
  6. package/dist/lib/darwin_aarch64/libdeflate.dylib +0 -0
  7. package/dist/lib/darwin_aarch64/libjemalloc_selva.2.dylib +0 -0
  8. package/dist/lib/darwin_aarch64/libnode-v22.node +0 -0
  9. package/dist/lib/darwin_aarch64/libnode-v23.node +0 -0
  10. package/dist/lib/darwin_aarch64/libnode-v24.node +0 -0
  11. package/dist/lib/darwin_aarch64/libnode-v25.node +0 -0
  12. package/dist/lib/darwin_aarch64/libselva.dylib +0 -0
  13. package/dist/lib/linux_aarch64/include/cdefs.h +4 -0
  14. package/dist/lib/linux_aarch64/include/selva/db.h +25 -5
  15. package/dist/lib/linux_aarch64/include/selva/fields.h +34 -72
  16. package/dist/lib/linux_aarch64/include/selva/selva_lang.h +7 -0
  17. package/dist/lib/linux_aarch64/include/selva/types.h +9 -13
  18. package/dist/lib/linux_aarch64/libdeflate.so +0 -0
  19. package/dist/lib/linux_aarch64/libnode-v22.node +0 -0
  20. package/dist/lib/linux_aarch64/libnode-v23.node +0 -0
  21. package/dist/lib/linux_aarch64/libnode-v24.node +0 -0
  22. package/dist/lib/linux_aarch64/libnode-v25.node +0 -0
  23. package/dist/lib/linux_aarch64/libselva.so +0 -0
  24. package/dist/lib/linux_x86_64/include/cdefs.h +4 -0
  25. package/dist/lib/linux_x86_64/include/selva/db.h +25 -5
  26. package/dist/lib/linux_x86_64/include/selva/fields.h +34 -72
  27. package/dist/lib/linux_x86_64/include/selva/selva_lang.h +7 -0
  28. package/dist/lib/linux_x86_64/include/selva/types.h +9 -13
  29. package/dist/lib/linux_x86_64/libdeflate.so +0 -0
  30. package/dist/lib/linux_x86_64/libnode-v22.node +0 -0
  31. package/dist/lib/linux_x86_64/libnode-v23.node +0 -0
  32. package/dist/lib/linux_x86_64/libnode-v24.node +0 -0
  33. package/dist/lib/linux_x86_64/libnode-v25.node +0 -0
  34. package/dist/lib/linux_x86_64/libselva.so +0 -0
  35. package/dist/src/client/modify/Tmp.d.ts +0 -1
  36. package/dist/src/client/modify/Tmp.js +14 -9
  37. package/dist/src/client/modify/create/index.js +6 -5
  38. package/dist/src/client/modify/drain.js +6 -2
  39. package/dist/src/client/modify/edges/binary.js +3 -2
  40. package/dist/src/client/modify/edges/reference.js +2 -3
  41. package/dist/src/client/modify/edges/references.js +2 -3
  42. package/dist/src/client/modify/edges/separate.js +4 -1
  43. package/dist/src/client/modify/edges/string.js +2 -3
  44. package/dist/src/client/modify/error.d.ts +29 -0
  45. package/dist/src/client/modify/error.js +10 -0
  46. package/dist/src/client/modify/props/alias.js +1 -1
  47. package/dist/src/client/modify/props/binary.js +1 -1
  48. package/dist/src/client/modify/props/cardinality.js +1 -1
  49. package/dist/src/client/modify/props/fixed.js +13 -14
  50. package/dist/src/client/modify/props/reference.js +2 -2
  51. package/dist/src/client/modify/props/references.js +7 -7
  52. package/dist/src/client/modify/props/string.js +1 -1
  53. package/dist/src/client/modify/props/vector.js +1 -11
  54. package/dist/src/client/modify/types.d.ts +1 -0
  55. package/dist/src/client/modify/types.js +1 -0
  56. package/dist/src/client/modify/validate.d.ts +1 -1
  57. package/dist/src/client/modify/validate.js +4 -3
  58. package/dist/src/client/query/BasedDbQuery.d.ts +4 -4
  59. package/dist/src/client/query/BasedDbQuery.js +23 -12
  60. package/dist/src/client/query/BasedQueryResponse.d.ts +0 -1
  61. package/dist/src/client/query/BasedQueryResponse.js +0 -3
  62. package/dist/src/client/query/aggregates/aggregation.d.ts +1 -1
  63. package/dist/src/client/query/aggregates/aggregation.js +123 -51
  64. package/dist/src/client/query/display.js +14 -8
  65. package/dist/src/client/query/filter/createFixedFilterBuffer.js +59 -22
  66. package/dist/src/client/query/filter/createReferenceFilter.js +13 -13
  67. package/dist/src/client/query/filter/createVariableFilterBuffer.js +6 -3
  68. package/dist/src/client/query/filter/filter.js +8 -0
  69. package/dist/src/client/query/filter/primitiveFilter.js +4 -1
  70. package/dist/src/client/query/filter/{toBuffer.d.ts → toByteCode.d.ts} +3 -2
  71. package/dist/src/client/query/filter/{toBuffer.js → toByteCode.js} +46 -12
  72. package/dist/src/client/query/filter/types.d.ts +1 -0
  73. package/dist/src/client/query/filter/types.js +33 -5
  74. package/dist/src/client/query/include/toByteCode.d.ts +2 -2
  75. package/dist/src/client/query/include/toByteCode.js +1 -1
  76. package/dist/src/client/query/query.d.ts +1 -1
  77. package/dist/src/client/query/query.js +1 -1
  78. package/dist/src/client/query/queryDef.js +6 -2
  79. package/dist/src/client/query/registerQuery.js +5 -9
  80. package/dist/src/client/query/subscription/index.js +5 -0
  81. package/dist/src/client/query/subscription/toByteCode.d.ts +6 -0
  82. package/dist/src/client/query/subscription/toByteCode.js +139 -0
  83. package/dist/src/client/query/subscription/types.d.ts +6 -0
  84. package/dist/src/client/query/subscription/types.js +7 -9
  85. package/dist/src/client/query/toByteCode/aggregates.d.ts +2 -0
  86. package/dist/src/client/query/toByteCode/aggregates.js +60 -0
  87. package/dist/src/client/query/toByteCode/alias.d.ts +2 -0
  88. package/dist/src/client/query/toByteCode/alias.js +24 -0
  89. package/dist/src/client/query/toByteCode/default.d.ts +2 -2
  90. package/dist/src/client/query/toByteCode/default.js +21 -24
  91. package/dist/src/client/query/toByteCode/id.d.ts +2 -0
  92. package/dist/src/client/query/toByteCode/id.js +17 -0
  93. package/dist/src/client/query/toByteCode/ids.d.ts +2 -0
  94. package/dist/src/client/query/toByteCode/ids.js +52 -0
  95. package/dist/src/client/query/toByteCode/offsets.d.ts +35 -0
  96. package/dist/src/client/query/toByteCode/offsets.js +36 -0
  97. package/dist/src/client/query/toByteCode/reference.d.ts +2 -0
  98. package/dist/src/client/query/toByteCode/reference.js +12 -0
  99. package/dist/src/client/query/toByteCode/references.d.ts +2 -0
  100. package/dist/src/client/query/toByteCode/references.js +35 -0
  101. package/dist/src/client/query/toByteCode/toByteCode.d.ts +4 -2
  102. package/dist/src/client/query/toByteCode/toByteCode.js +62 -189
  103. package/dist/src/client/query/types.d.ts +24 -5
  104. package/dist/src/client/query/validation.d.ts +5 -1
  105. package/dist/src/client/query/validation.js +15 -3
  106. package/dist/src/client/string.js +1 -1
  107. package/dist/src/hooks.js +2 -29
  108. package/dist/src/index.d.ts +1 -0
  109. package/dist/src/index.js +1 -0
  110. package/dist/src/native.d.ts +8 -1
  111. package/dist/src/native.js +23 -2
  112. package/dist/src/server/index.d.ts +2 -0
  113. package/dist/src/server/index.js +11 -2
  114. package/dist/src/server/schema.js +3 -2
  115. package/dist/src/server/schemaSelvaBuffer.d.ts +4 -0
  116. package/dist/src/server/schemaSelvaBuffer.js +182 -0
  117. package/dist/src/server/subscription.d.ts +32 -0
  118. package/dist/src/server/subscription.js +275 -0
  119. package/dist/src/utils.js +2 -3
  120. package/package.json +5 -6
@@ -0,0 +1,139 @@
1
+ import { writeInt64, writeUint16, writeUint32 } from '@based/utils';
2
+ import native from '../../../native.js';
3
+ import { ID } from '../toByteCode/offsets.js';
4
+ import { QueryType } from '../types.js';
5
+ import { SubscriptionType } from './types.js';
6
+ export const collectFilters = (filter, fields, nowQueries = []) => {
7
+ if (filter.hasSubMeta) {
8
+ for (const [prop, conditions] of filter.conditions) {
9
+ if (fields) {
10
+ fields.add(prop);
11
+ }
12
+ for (const condition of conditions) {
13
+ if (condition.subscriptionMeta) {
14
+ if (condition.subscriptionMeta.now) {
15
+ nowQueries.push(...condition.subscriptionMeta.now);
16
+ }
17
+ }
18
+ }
19
+ }
20
+ }
21
+ else {
22
+ for (const prop of filter.conditions.keys()) {
23
+ if (fields) {
24
+ fields.add(prop);
25
+ }
26
+ }
27
+ }
28
+ if (filter.or) {
29
+ collectFilters(filter.or, fields, nowQueries);
30
+ }
31
+ if (filter.and) {
32
+ collectFilters(filter.and, fields, nowQueries);
33
+ }
34
+ if (filter.references) {
35
+ for (const [prop, ref] of filter.references) {
36
+ if (fields) {
37
+ fields.add(prop);
38
+ }
39
+ collectFilters(ref, undefined, nowQueries);
40
+ }
41
+ }
42
+ return nowQueries;
43
+ };
44
+ export const collectFields = (def) => {
45
+ const fields = new Set();
46
+ if (def.include.main.len > 0) {
47
+ fields.add(0);
48
+ }
49
+ for (const prop of def.include.props.values()) {
50
+ fields.add(prop.def.prop);
51
+ }
52
+ for (const prop of def.references.keys()) {
53
+ fields.add(prop);
54
+ }
55
+ return fields;
56
+ };
57
+ export const collectTypes = (def, types = new Set()) => {
58
+ if ('references' in def) {
59
+ for (const ref of def.references.values()) {
60
+ types.add(ref.schema.id);
61
+ // TODO Now queries here...
62
+ collectTypes(ref, types);
63
+ }
64
+ }
65
+ if ('filter' in def && 'references' in def.filter) {
66
+ for (const ref of def.filter.references.values()) {
67
+ types.add(ref.schema.id);
68
+ collectTypes(ref);
69
+ }
70
+ }
71
+ return types;
72
+ };
73
+ export const registerSubscription = (query) => {
74
+ if (query.def.queryType === QueryType.id) {
75
+ // @ts-ignore
76
+ const id = query.def.target.id;
77
+ const fields = collectFields(query.def);
78
+ const typeId = query.def.schema.id;
79
+ const subId = native.crc32(query.buffer.subarray(ID.id + 4, query.buffer.byteLength - 4));
80
+ const headerLen = 16;
81
+ const types = collectTypes(query.def);
82
+ const nowQueries = collectFilters(query.def.filter, fields);
83
+ const buffer = new Uint8Array(headerLen + fields.size + types.size * 2 + nowQueries.length * 16);
84
+ buffer[0] = SubscriptionType.singleId;
85
+ writeUint32(buffer, subId, 1);
86
+ writeUint16(buffer, typeId, 5);
87
+ writeUint32(buffer, id, 7);
88
+ buffer[11] = fields.size;
89
+ writeUint16(buffer, types.size, 12);
90
+ writeUint16(buffer, nowQueries.length, 14);
91
+ let i = headerLen;
92
+ for (const field of fields) {
93
+ buffer[i] = field;
94
+ i++;
95
+ }
96
+ for (const type of types) {
97
+ writeUint16(buffer, type, i);
98
+ i += 2;
99
+ }
100
+ for (const now of nowQueries) {
101
+ buffer[i] = now.prop.prop;
102
+ buffer[i + 1] = now.ctx.operation;
103
+ writeUint16(buffer, now.ctx.typeId, i + 2);
104
+ writeInt64(buffer, now.offset, i + 4);
105
+ writeUint32(buffer, now.resolvedByteIndex, i + 12);
106
+ i += 16;
107
+ }
108
+ query.subscriptionBuffer = buffer;
109
+ }
110
+ else {
111
+ const typeId = query.def.schema.id;
112
+ const types = collectTypes(query.def);
113
+ const nowQueries = collectFilters(query.def.filter, new Set());
114
+ const typeLen = types.has(typeId) ? types.size - 1 : types.size;
115
+ const headerLen = 8;
116
+ const buffer = new Uint8Array(headerLen + typeLen * 2 + nowQueries.length * 16);
117
+ buffer[0] = SubscriptionType.fullType;
118
+ writeUint16(buffer, typeId, 1);
119
+ writeUint16(buffer, typeLen, 3);
120
+ writeUint16(buffer, nowQueries.length, 5); // hopefully you dont have more then 255 now filters...
121
+ let i = headerLen;
122
+ for (const typeIdIt of types) {
123
+ if (typeIdIt !== typeId) {
124
+ writeUint16(buffer, typeIdIt, i);
125
+ i += 2;
126
+ }
127
+ }
128
+ for (const now of nowQueries) {
129
+ buffer[i] = now.prop.prop;
130
+ buffer[i + 1] = now.ctx.operation;
131
+ writeUint16(buffer, now.ctx.typeId, i + 2);
132
+ writeInt64(buffer, now.offset, i + 4);
133
+ writeUint32(buffer, now.resolvedByteIndex, i + 12);
134
+ i += 16;
135
+ }
136
+ query.subscriptionBuffer = buffer;
137
+ }
138
+ };
139
+ //# sourceMappingURL=toByteCode.js.map
@@ -3,3 +3,9 @@ export type OnData = (res: BasedQueryResponse) => any;
3
3
  export type OnError = (err: Error) => any;
4
4
  export type OnClose = () => any;
5
5
  export type OnSubscription = (res: any, err?: Error) => void;
6
+ export declare enum SubscriptionType {
7
+ fullType = 0,
8
+ singleId = 1,
9
+ timeBasedSingleId = 2,// If any time in there just put it as 200ms for now...
10
+ timeBasedMulti = 3
11
+ }
@@ -1,10 +1,8 @@
1
- export {};
2
- // export type Subscription = {
3
- // query: BasedDbQuery
4
- // subs: Set<OnSubscription>
5
- // res?: BasedQueryResponse
6
- // closed: boolean
7
- // inProgress: boolean // dont need to check
8
- // // filter - realy nice to add
9
- // }
1
+ export var SubscriptionType;
2
+ (function (SubscriptionType) {
3
+ SubscriptionType[SubscriptionType["fullType"] = 0] = "fullType";
4
+ SubscriptionType[SubscriptionType["singleId"] = 1] = "singleId";
5
+ SubscriptionType[SubscriptionType["timeBasedSingleId"] = 2] = "timeBasedSingleId";
6
+ SubscriptionType[SubscriptionType["timeBasedMulti"] = 3] = "timeBasedMulti";
7
+ })(SubscriptionType || (SubscriptionType = {}));
10
8
  //# sourceMappingURL=types.js.map
@@ -0,0 +1,2 @@
1
+ import { QueryDef, IntermediateByteCode } from '../types.js';
2
+ export declare const aggregatesQuery: (def: QueryDef) => IntermediateByteCode;
@@ -0,0 +1,60 @@
1
+ import { filterToBuffer } from '../query.js';
2
+ import { QueryDefType, QueryType, } from '../types.js';
3
+ import { aggregateToBuffer, isRootCountOnly, } from '../aggregates/aggregation.js';
4
+ export const aggregatesQuery = (def) => {
5
+ const aggregateSize = def.aggregate.size || 0;
6
+ if (aggregateSize === 0) {
7
+ throw new Error('Wrong aggregate size (0)');
8
+ }
9
+ const filterSize = def.filter.size || 0;
10
+ if (def.type === QueryDefType.References) {
11
+ const buf = new Uint8Array(12 + filterSize + aggregateSize); // op + refSize + filterSize + offset + typeId + refField
12
+ const sz = 9 + filterSize + aggregateSize; // filterSize + offset + typeId + refField
13
+ buf[0] = 2 /* includeOp.REFS_AGGREGATION */;
14
+ buf[1] = sz;
15
+ buf[2] = sz >>> 8;
16
+ buf[3] = filterSize;
17
+ buf[4] = filterSize >>> 8;
18
+ buf[5] = def.range.offset;
19
+ buf[6] = def.range.offset >>> 8;
20
+ buf[7] = def.range.offset >>> 16;
21
+ buf[8] = def.range.offset >>> 24;
22
+ if (filterSize) {
23
+ buf.set(filterToBuffer(def.filter, 9), 9);
24
+ }
25
+ // required to get typeEntry and fieldSchema
26
+ buf[9 + filterSize] = def.schema.idUint8[0]; // typeId
27
+ buf[9 + 1 + filterSize] = def.schema.idUint8[1]; // typeId
28
+ buf[9 + 2 + filterSize] = def.target.propDef.prop; // refField
29
+ const aggregateBuffer = aggregateToBuffer(def.aggregate);
30
+ buf.set(aggregateBuffer, 9 + 3 + filterSize);
31
+ return { buffer: buf, def, needsMetaResolve: def.filter.hasSubMeta };
32
+ }
33
+ else {
34
+ const buf = new Uint8Array(16 + filterSize + aggregateSize);
35
+ buf[0] = isRootCountOnly(def, filterSize)
36
+ ? QueryType.aggregatesCountType
37
+ : QueryType.aggregates;
38
+ buf[1] = def.schema.idUint8[0];
39
+ buf[2] = def.schema.idUint8[1];
40
+ buf[3] = def.range.offset;
41
+ buf[4] = def.range.offset >>> 8;
42
+ buf[5] = def.range.offset >>> 16;
43
+ buf[6] = def.range.offset >>> 24;
44
+ buf[7] = def.range.limit;
45
+ buf[8] = def.range.limit >>> 8;
46
+ buf[9] = def.range.limit >>> 16;
47
+ buf[10] = def.range.limit >>> 24;
48
+ buf[11] = filterSize;
49
+ buf[12] = filterSize >>> 8;
50
+ if (filterSize) {
51
+ buf.set(filterToBuffer(def.filter, 13), 13);
52
+ }
53
+ const aggregateBuffer = aggregateToBuffer(def.aggregate);
54
+ buf[14 + filterSize] = aggregateSize;
55
+ buf[15 + filterSize] = aggregateSize >>> 8;
56
+ buf.set(aggregateBuffer, 16 + filterSize);
57
+ return { buffer: buf, def, needsMetaResolve: def.filter.hasSubMeta };
58
+ }
59
+ };
60
+ //# sourceMappingURL=aggregates.js.map
@@ -0,0 +1,2 @@
1
+ import { QueryDef, IntermediateByteCode } from '../types.js';
2
+ export declare const aliasQuery: (def: QueryDef) => IntermediateByteCode;
@@ -0,0 +1,24 @@
1
+ import { filterToBuffer } from '../query.js';
2
+ import { QueryType } from '../types.js';
3
+ import { ENCODER, writeUint16 } from '@based/utils';
4
+ export const aliasQuery = (def) => {
5
+ const filterSize = def.filter.size || 0;
6
+ const alias = def.target.resolvedAlias;
7
+ const aliasStr = ENCODER.encode(alias.value);
8
+ const aliasLen = aliasStr.byteLength;
9
+ const buf = new Uint8Array(8 + filterSize + aliasLen);
10
+ buf[0] = QueryType.alias;
11
+ writeUint16(buf, def.schema.id, 1);
12
+ buf[3] = alias.def.prop;
13
+ buf[4] = aliasLen;
14
+ buf[5] = aliasLen >>> 8;
15
+ buf.set(aliasStr, 6);
16
+ buf[6 + aliasLen] = filterSize;
17
+ buf[7 + aliasLen] = filterSize >>> 8;
18
+ if (filterSize) {
19
+ const x = filterToBuffer(def.filter, 8 + aliasLen);
20
+ buf.set(x, 8 + aliasLen);
21
+ }
22
+ return { buffer: buf, def, needsMetaResolve: def.filter.hasSubMeta };
23
+ };
24
+ //# sourceMappingURL=alias.js.map
@@ -1,2 +1,2 @@
1
- import { QueryDef } from '../types.js';
2
- export declare const defaultQuery: (def: QueryDef, filterSize: number, sortSize: number, searchSize: number, sort: Uint8Array, search: Uint8Array) => Uint8Array<ArrayBuffer>;
1
+ import { QueryDef, IntermediateByteCode } from '../types.js';
2
+ export declare const defaultQuery: (def: QueryDef, filterSize: number, sortSize: number, searchSize: number, sort: Uint8Array, search: Uint8Array) => IntermediateByteCode;
@@ -1,38 +1,35 @@
1
1
  import { filterToBuffer, isSimpleMainFilter } from '../query.js';
2
2
  import { QueryType } from '../types.js';
3
+ import { writeUint16, writeUint32 } from '@based/utils';
4
+ import { DEFAULT } from './offsets.js';
3
5
  export const defaultQuery = (def, filterSize, sortSize, searchSize, sort, search) => {
4
- const buf = new Uint8Array(18 + filterSize + sortSize + searchSize);
6
+ const buffer = new Uint8Array(DEFAULT.baseSize + filterSize + sortSize + searchSize);
5
7
  let index = 0;
6
- buf[index++] = QueryType.default;
7
- buf[index++] = def.schema.idUint8[0];
8
- buf[index++] = def.schema.idUint8[1];
9
- buf[index++] = def.range.offset;
10
- buf[index++] = def.range.offset >>> 8;
11
- buf[index++] = def.range.offset >>> 16;
12
- buf[index++] = def.range.offset >>> 24;
13
- buf[index++] = def.range.limit;
14
- buf[index++] = def.range.limit >>> 8;
15
- buf[index++] = def.range.limit >>> 16;
16
- buf[index++] = def.range.limit >>> 24;
17
- buf[index++] = filterSize;
18
- buf[index++] = filterSize >>> 8;
19
- buf[index++] = filterSize && isSimpleMainFilter(def.filter) ? 1 : 0;
8
+ buffer[index++] = QueryType.default;
9
+ writeUint16(buffer, def.schema.id, index);
10
+ index += 2;
11
+ writeUint32(buffer, def.range.offset, index);
12
+ index += 4;
13
+ writeUint32(buffer, def.range.limit, index);
14
+ index += 4;
15
+ writeUint16(buffer, filterSize, index);
16
+ index += 2;
17
+ buffer[index++] = filterSize && isSimpleMainFilter(def.filter) ? 1 : 0;
20
18
  if (filterSize) {
21
- buf.set(filterToBuffer(def.filter), index);
19
+ buffer.set(filterToBuffer(def.filter, index), index);
22
20
  index += filterSize;
23
21
  }
24
- buf[index++] = sortSize;
25
- buf[index++] = sortSize >>> 8;
22
+ writeUint16(buffer, sortSize, index);
23
+ index += 2;
26
24
  if (sortSize) {
27
- buf.set(sort, index);
25
+ buffer.set(sort, index);
28
26
  index += sortSize;
29
27
  }
30
- buf[index++] = searchSize;
31
- buf[index++] = searchSize >>> 8;
28
+ writeUint16(buffer, searchSize, index);
29
+ index += 2;
32
30
  if (searchSize) {
33
- buf.set(search, index);
34
- index += searchSize;
31
+ buffer.set(search, index);
35
32
  }
36
- return buf;
33
+ return { buffer, def, needsMetaResolve: def.filter.hasSubMeta };
37
34
  };
38
35
  //# sourceMappingURL=default.js.map
@@ -0,0 +1,2 @@
1
+ import { QueryDef, IntermediateByteCode } from '../types.js';
2
+ export declare const idQuery: (def: QueryDef) => IntermediateByteCode;
@@ -0,0 +1,17 @@
1
+ import { filterToBuffer } from '../query.js';
2
+ import { QueryType } from '../types.js';
3
+ import { writeUint16, writeUint32 } from '@based/utils';
4
+ import { ID } from './offsets.js';
5
+ export const idQuery = (def) => {
6
+ const filterSize = def.filter.size || 0;
7
+ const buffer = new Uint8Array(ID.baseSize + filterSize);
8
+ buffer[ID.queryType] = QueryType.id;
9
+ writeUint16(buffer, def.schema.id, ID.type);
10
+ writeUint32(buffer, def.target.id, ID.id);
11
+ writeUint16(buffer, filterSize, ID.filterSize);
12
+ if (filterSize) {
13
+ buffer.set(filterToBuffer(def.filter, ID.filter), ID.filter);
14
+ }
15
+ return { buffer, def, needsMetaResolve: def.filter.hasSubMeta };
16
+ };
17
+ //# sourceMappingURL=id.js.map
@@ -0,0 +1,2 @@
1
+ import { QueryDef, IntermediateByteCode } from '../types.js';
2
+ export declare const idsQuery: (def: QueryDef) => IntermediateByteCode;
@@ -0,0 +1,52 @@
1
+ import { filterToBuffer } from '../query.js';
2
+ import { QueryType } from '../types.js';
3
+ import { searchToBuffer } from '../search/index.js';
4
+ import { createSortBuffer } from '../sort.js';
5
+ import { writeUint16, writeUint32 } from '@based/utils';
6
+ import { IDS } from './offsets.js';
7
+ export const idsQuery = (def) => {
8
+ const filterSize = def.filter.size || 0;
9
+ let sort;
10
+ let sortSize = 0;
11
+ if (def.sort) {
12
+ sort = createSortBuffer(def.sort);
13
+ sortSize = sort.byteLength;
14
+ }
15
+ let search;
16
+ let searchSize = 0;
17
+ if (def.search) {
18
+ search = searchToBuffer(def.search);
19
+ searchSize = def.search.size;
20
+ }
21
+ const idsSize = def.target.ids.length * 4;
22
+ const buffer = new Uint8Array(IDS.baseSize + idsSize + filterSize + sortSize + searchSize);
23
+ let index = 0;
24
+ buffer[IDS.queryType] = QueryType.ids;
25
+ writeUint16(buffer, def.schema.id, IDS.type);
26
+ writeUint32(buffer, idsSize, IDS.idsSize);
27
+ buffer.set(new Uint8Array(def.target.ids.buffer), IDS.idsValue);
28
+ index = IDS.idsValue + idsSize;
29
+ writeUint32(buffer, def.range.offset, index);
30
+ index += 4;
31
+ writeUint32(buffer, def.range.limit, index);
32
+ index += 4;
33
+ writeUint16(buffer, filterSize, index);
34
+ index += 2;
35
+ if (filterSize) {
36
+ buffer.set(filterToBuffer(def.filter, index), index);
37
+ index += filterSize;
38
+ }
39
+ writeUint16(buffer, sortSize, index);
40
+ index += 2;
41
+ if (sortSize) {
42
+ buffer.set(sort, index);
43
+ index += sortSize;
44
+ }
45
+ writeUint16(buffer, searchSize, index);
46
+ index += 2;
47
+ if (searchSize) {
48
+ buffer.set(search, index);
49
+ }
50
+ return { buffer, def, needsMetaResolve: def.filter.hasSubMeta };
51
+ };
52
+ //# sourceMappingURL=ids.js.map
@@ -0,0 +1,35 @@
1
+ export declare const ID: {
2
+ baseSize: number;
3
+ queryType: number;
4
+ type: number;
5
+ id: number;
6
+ filterSize: number;
7
+ filter: number;
8
+ };
9
+ export declare const IDS: {
10
+ baseSize: number;
11
+ queryType: number;
12
+ type: number;
13
+ idsSize: number;
14
+ idsValue: number;
15
+ };
16
+ export declare const REFERENCES: {
17
+ baseSize: number;
18
+ includeOp: number;
19
+ size: number;
20
+ filterSize: number;
21
+ sortSize: number;
22
+ offset: number;
23
+ limit: number;
24
+ filter: number;
25
+ };
26
+ export declare const REFERENCE: {
27
+ baseSize: number;
28
+ includeOp: number;
29
+ sizeOffset: number;
30
+ type: number;
31
+ prop: number;
32
+ };
33
+ export declare const DEFAULT: {
34
+ baseSize: number;
35
+ };
@@ -0,0 +1,36 @@
1
+ export const ID = {
2
+ baseSize: 9, // queryType(1) + type(2) + id(4) + filterSize(2)
3
+ queryType: 0,
4
+ type: 1,
5
+ id: 3,
6
+ filterSize: 7,
7
+ filter: 9,
8
+ };
9
+ export const IDS = {
10
+ baseSize: 21, // queryType(1) + type(2) + idsSize(4) + offset(4) + limit(4) + filterSize(2) + sortSize(2) + searchSize(2)
11
+ queryType: 0,
12
+ type: 1,
13
+ idsSize: 3,
14
+ idsValue: 7,
15
+ };
16
+ export const REFERENCES = {
17
+ baseSize: 18, // includeOp(1) + size(2) + filterSize(2) + sortSize(2) + offset(4) + limit(4) + type(2) + prop(1)
18
+ includeOp: 0,
19
+ size: 1,
20
+ filterSize: 3,
21
+ sortSize: 5,
22
+ offset: 7,
23
+ limit: 11,
24
+ filter: 15,
25
+ };
26
+ export const REFERENCE = {
27
+ baseSize: 6, // includeOp(1) + size(2) + type(2) + prop(1)
28
+ includeOp: 0,
29
+ sizeOffset: 1,
30
+ type: 3,
31
+ prop: 5,
32
+ };
33
+ export const DEFAULT = {
34
+ baseSize: 18, // queryType(1) + type(2) + offset(4) + limit(4) + filterSize(2) + isSimple(1) + sortSize(2) + searchSize(2)
35
+ };
36
+ //# sourceMappingURL=offsets.js.map
@@ -0,0 +1,2 @@
1
+ import { QueryDef, IntermediateByteCode } from '../types.js';
2
+ export declare const referenceQuery: (def: QueryDef, size: number) => IntermediateByteCode;
@@ -0,0 +1,12 @@
1
+ import { writeUint16 } from '@based/utils';
2
+ import { REFERENCE } from './offsets.js';
3
+ export const referenceQuery = (def, size) => {
4
+ const buffer = new Uint8Array(REFERENCE.baseSize);
5
+ const sz = size + 3;
6
+ buffer[REFERENCE.includeOp] = 5 /* includeOp.REFERENCE */;
7
+ writeUint16(buffer, sz, REFERENCE.sizeOffset);
8
+ writeUint16(buffer, def.schema.id, REFERENCE.type);
9
+ buffer[REFERENCE.prop] = def.target.propDef.prop;
10
+ return { buffer, def, needsMetaResolve: def.filter.hasSubMeta };
11
+ };
12
+ //# sourceMappingURL=reference.js.map
@@ -0,0 +1,2 @@
1
+ import { QueryDef, IntermediateByteCode } from '../types.js';
2
+ export declare const referencesQuery: (def: QueryDef, size: number) => IntermediateByteCode;
@@ -0,0 +1,35 @@
1
+ import { filterToBuffer } from '../query.js';
2
+ import { createSortBuffer } from '../sort.js';
3
+ import { writeUint16, writeUint32 } from '@based/utils';
4
+ import { REFERENCES } from './offsets.js';
5
+ export const referencesQuery = (def, size) => {
6
+ const filterSize = def.filter.size || 0;
7
+ let sort;
8
+ let sortSize = 0;
9
+ if (def.sort) {
10
+ sort = createSortBuffer(def.sort);
11
+ sortSize = sort.byteLength;
12
+ }
13
+ const modsSize = filterSize + sortSize;
14
+ const buffer = new Uint8Array(REFERENCES.baseSize + modsSize);
15
+ const sz = size + 7 + modsSize + 8;
16
+ buffer[REFERENCES.includeOp] = 4 /* includeOp.REFERENCES */;
17
+ writeUint16(buffer, sz, REFERENCES.size);
18
+ writeUint16(buffer, filterSize, REFERENCES.filterSize);
19
+ writeUint16(buffer, sortSize, REFERENCES.sortSize);
20
+ writeUint32(buffer, def.range.offset, REFERENCES.offset);
21
+ writeUint32(buffer, def.range.limit, REFERENCES.limit);
22
+ let index = REFERENCES.filter;
23
+ if (filterSize) {
24
+ buffer.set(filterToBuffer(def.filter, index), index);
25
+ index += filterSize;
26
+ }
27
+ if (sort) {
28
+ buffer.set(sort, index);
29
+ index += sortSize;
30
+ }
31
+ writeUint16(buffer, def.schema.id, index);
32
+ buffer[index + 2] = def.target.propDef.prop;
33
+ return { buffer, def, needsMetaResolve: def.filter.hasSubMeta };
34
+ };
35
+ //# sourceMappingURL=references.js.map
@@ -1,3 +1,5 @@
1
- import { QueryDef } from '../types.js';
1
+ import { IntermediateByteCode, QueryDef } from '../types.js';
2
2
  import { DbClient } from '../../index.js';
3
- export declare function defToBuffer(db: DbClient, def: QueryDef): Uint8Array[];
3
+ import { BasedDbQuery } from '../BasedDbQuery.js';
4
+ export declare function defToBuffer(db: DbClient, def: QueryDef): IntermediateByteCode[];
5
+ export declare const queryToBuffer: (query: BasedDbQuery) => Uint8Array<ArrayBuffer>;