@anvailabs/proximadb-client 0.3.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 (65) hide show
  1. package/README.md +160 -0
  2. package/dist/client.d.ts +319 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +681 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/collection.d.ts +227 -0
  7. package/dist/collection.d.ts.map +1 -0
  8. package/dist/collection.js +436 -0
  9. package/dist/collection.js.map +1 -0
  10. package/dist/esm/client.js +674 -0
  11. package/dist/esm/client.js.map +1 -0
  12. package/dist/esm/collection.js +428 -0
  13. package/dist/esm/collection.js.map +1 -0
  14. package/dist/esm/filter.js +228 -0
  15. package/dist/esm/filter.js.map +1 -0
  16. package/dist/esm/generated/schema.js +6 -0
  17. package/dist/esm/generated/schema.js.map +1 -0
  18. package/dist/esm/graph.js +678 -0
  19. package/dist/esm/graph.js.map +1 -0
  20. package/dist/esm/index.js +86 -0
  21. package/dist/esm/index.js.map +1 -0
  22. package/dist/esm/search.js +317 -0
  23. package/dist/esm/search.js.map +1 -0
  24. package/dist/esm/transport.js +33 -0
  25. package/dist/esm/transport.js.map +1 -0
  26. package/dist/esm/types.js +181 -0
  27. package/dist/esm/types.js.map +1 -0
  28. package/dist/filter.d.ts +51 -0
  29. package/dist/filter.d.ts.map +1 -0
  30. package/dist/filter.js +241 -0
  31. package/dist/filter.js.map +1 -0
  32. package/dist/generated/schema.d.ts +4271 -0
  33. package/dist/generated/schema.d.ts.map +1 -0
  34. package/dist/generated/schema.js +7 -0
  35. package/dist/generated/schema.js.map +1 -0
  36. package/dist/graph.d.ts +350 -0
  37. package/dist/graph.d.ts.map +1 -0
  38. package/dist/graph.js +690 -0
  39. package/dist/graph.js.map +1 -0
  40. package/dist/index.d.ts +58 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +126 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/search.d.ts +160 -0
  45. package/dist/search.d.ts.map +1 -0
  46. package/dist/search.js +322 -0
  47. package/dist/search.js.map +1 -0
  48. package/dist/transport.d.ts +40 -0
  49. package/dist/transport.d.ts.map +1 -0
  50. package/dist/transport.js +39 -0
  51. package/dist/transport.js.map +1 -0
  52. package/dist/types.d.ts +632 -0
  53. package/dist/types.d.ts.map +1 -0
  54. package/dist/types.js +185 -0
  55. package/dist/types.js.map +1 -0
  56. package/package.json +72 -0
  57. package/src/client.ts +856 -0
  58. package/src/collection.ts +578 -0
  59. package/src/filter.ts +280 -0
  60. package/src/generated/schema.ts +4271 -0
  61. package/src/graph.ts +811 -0
  62. package/src/index.ts +184 -0
  63. package/src/search.ts +401 -0
  64. package/src/transport.ts +52 -0
  65. package/src/types.ts +726 -0
@@ -0,0 +1,51 @@
1
+ /**
2
+ * ProximaDB TypeScript SDK - Filter Builder
3
+ *
4
+ * Provides a fluent API for building metadata filters on vector searches.
5
+ *
6
+ * Copyright 2025 ProximaDB Contributors
7
+ * Licensed under the Apache License, Version 2.0
8
+ */
9
+ import { Filter, JsonValue } from "./types";
10
+ /**
11
+ * Builder for constructing complex filter expressions
12
+ */
13
+ export declare class FilterBuilder {
14
+ private conditions;
15
+ private currentOperator;
16
+ private pendingOperator;
17
+ static new(): FilterBuilder;
18
+ eq(field: string, value: JsonValue): FilterBuilder;
19
+ ne(field: string, value: JsonValue): FilterBuilder;
20
+ gt(field: string, value: JsonValue): FilterBuilder;
21
+ gte(field: string, value: JsonValue): FilterBuilder;
22
+ lt(field: string, value: JsonValue): FilterBuilder;
23
+ lte(field: string, value: JsonValue): FilterBuilder;
24
+ inList(field: string, values: JsonValue[]): FilterBuilder;
25
+ notIn(field: string, values: JsonValue[]): FilterBuilder;
26
+ contains(field: string, value: JsonValue): FilterBuilder;
27
+ startsWith(field: string, prefixVal: string): FilterBuilder;
28
+ endsWith(field: string, suffixVal: string): FilterBuilder;
29
+ prefix(field: string, prefixVal: string): FilterBuilder;
30
+ suffix(field: string, suffixVal: string): FilterBuilder;
31
+ exists(field: string): FilterBuilder;
32
+ isNull(field: string): FilterBuilder;
33
+ range(field: string, min: JsonValue, max: JsonValue): FilterBuilder;
34
+ and(): FilterBuilder;
35
+ or(): FilterBuilder;
36
+ group(builderFn: (fb: FilterBuilder) => FilterBuilder): FilterBuilder;
37
+ private addCondition;
38
+ build(): Filter;
39
+ toExpression(): string;
40
+ toJson(): string;
41
+ }
42
+ export declare function eq(field: string, value: JsonValue): Filter;
43
+ export declare function ne(field: string, value: JsonValue): Filter;
44
+ export declare function gt(field: string, value: JsonValue): Filter;
45
+ export declare function lt(field: string, value: JsonValue): Filter;
46
+ export declare function inList(field: string, values: JsonValue[]): Filter;
47
+ export declare function range(field: string, min: JsonValue, max: JsonValue): Filter;
48
+ export declare function andFilters(filters: Filter[]): Filter;
49
+ export declare function orFilters(filters: Filter[]): Filter;
50
+ export declare function filterToExpression(filter: Filter): string;
51
+ //# sourceMappingURL=filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"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"}
package/dist/filter.js ADDED
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+ /**
3
+ * ProximaDB TypeScript SDK - Filter Builder
4
+ *
5
+ * Provides a fluent API for building metadata filters on vector searches.
6
+ *
7
+ * Copyright 2025 ProximaDB Contributors
8
+ * Licensed under the Apache License, Version 2.0
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.FilterBuilder = void 0;
12
+ exports.eq = eq;
13
+ exports.ne = ne;
14
+ exports.gt = gt;
15
+ exports.lt = lt;
16
+ exports.inList = inList;
17
+ exports.range = range;
18
+ exports.andFilters = andFilters;
19
+ exports.orFilters = orFilters;
20
+ exports.filterToExpression = filterToExpression;
21
+ const types_1 = require("./types");
22
+ /**
23
+ * Check if a node is a FilterCondition
24
+ */
25
+ function isFilterCondition(node) {
26
+ return "field" in node && "operation" in node;
27
+ }
28
+ /**
29
+ * Check if a node is a FilterGroup
30
+ */
31
+ function isFilterGroup(node) {
32
+ return "operator" in node && "conditions" in node;
33
+ }
34
+ /**
35
+ * Convert a filter condition to expression string
36
+ */
37
+ function conditionToExpression(condition) {
38
+ const { field, operation, value } = condition;
39
+ if (value === undefined) {
40
+ const opStr = operation === "exists" ? "EXISTS" : "IS NULL";
41
+ return field + " " + opStr;
42
+ }
43
+ let valStr;
44
+ if (typeof value === "string") {
45
+ valStr = "'" + value + "'";
46
+ }
47
+ else if (Array.isArray(value)) {
48
+ const items = value.map((x) => typeof x === "string" ? "'" + x + "'" : String(x));
49
+ valStr = "[" + items.join(", ") + "]";
50
+ }
51
+ else {
52
+ valStr = String(value);
53
+ }
54
+ const opMap = {
55
+ equals: "=",
56
+ not_equals: "!=",
57
+ gt: ">",
58
+ gte: ">=",
59
+ lt: "<",
60
+ lte: "<=",
61
+ in: "IN",
62
+ not_in: "NOT IN",
63
+ contains: "CONTAINS",
64
+ starts_with: "STARTS WITH",
65
+ ends_with: "ENDS WITH",
66
+ };
67
+ const opStr = opMap[operation] ?? operation;
68
+ return field + " " + opStr + " " + valStr;
69
+ }
70
+ /**
71
+ * Convert a filter group to expression string
72
+ */
73
+ function groupToExpression(group) {
74
+ const exprs = group.conditions
75
+ .map((node) => {
76
+ if (isFilterCondition(node)) {
77
+ return conditionToExpression(node);
78
+ }
79
+ else if (isFilterGroup(node)) {
80
+ return "(" + groupToExpression(node) + ")";
81
+ }
82
+ return "";
83
+ })
84
+ .filter((s) => s.length > 0);
85
+ const sep = group.operator === "and" ? " AND " : " OR ";
86
+ return exprs.join(sep);
87
+ }
88
+ /**
89
+ * Builder for constructing complex filter expressions
90
+ */
91
+ class FilterBuilder {
92
+ conditions = [];
93
+ currentOperator = types_1.LogicalOp.And;
94
+ pendingOperator = null;
95
+ static new() {
96
+ return new FilterBuilder();
97
+ }
98
+ eq(field, value) {
99
+ this.addCondition({ field, operation: types_1.FilterOp.Eq, value });
100
+ return this;
101
+ }
102
+ ne(field, value) {
103
+ this.addCondition({ field, operation: types_1.FilterOp.Ne, value });
104
+ return this;
105
+ }
106
+ gt(field, value) {
107
+ this.addCondition({ field, operation: types_1.FilterOp.Gt, value });
108
+ return this;
109
+ }
110
+ gte(field, value) {
111
+ this.addCondition({ field, operation: types_1.FilterOp.Gte, value });
112
+ return this;
113
+ }
114
+ lt(field, value) {
115
+ this.addCondition({ field, operation: types_1.FilterOp.Lt, value });
116
+ return this;
117
+ }
118
+ lte(field, value) {
119
+ this.addCondition({ field, operation: types_1.FilterOp.Lte, value });
120
+ return this;
121
+ }
122
+ inList(field, values) {
123
+ this.addCondition({ field, operation: types_1.FilterOp.In, value: values });
124
+ return this;
125
+ }
126
+ notIn(field, values) {
127
+ this.addCondition({ field, operation: types_1.FilterOp.NotIn, value: values });
128
+ return this;
129
+ }
130
+ contains(field, value) {
131
+ this.addCondition({ field, operation: types_1.FilterOp.Contains, value });
132
+ return this;
133
+ }
134
+ startsWith(field, prefixVal) {
135
+ this.addCondition({ field, operation: types_1.FilterOp.StartsWith, value: prefixVal });
136
+ return this;
137
+ }
138
+ endsWith(field, suffixVal) {
139
+ this.addCondition({ field, operation: types_1.FilterOp.EndsWith, value: suffixVal });
140
+ return this;
141
+ }
142
+ prefix(field, prefixVal) {
143
+ return this.startsWith(field, prefixVal);
144
+ }
145
+ suffix(field, suffixVal) {
146
+ return this.endsWith(field, suffixVal);
147
+ }
148
+ exists(field) {
149
+ this.addCondition({ field, operation: types_1.FilterOp.Exists });
150
+ return this;
151
+ }
152
+ isNull(field) {
153
+ this.addCondition({ field, operation: types_1.FilterOp.IsNull });
154
+ return this;
155
+ }
156
+ range(field, min, max) {
157
+ this.addCondition({ field, operation: types_1.FilterOp.Gte, value: min });
158
+ this.addCondition({ field, operation: types_1.FilterOp.Lte, value: max });
159
+ return this;
160
+ }
161
+ and() {
162
+ this.pendingOperator = types_1.LogicalOp.And;
163
+ return this;
164
+ }
165
+ or() {
166
+ this.pendingOperator = types_1.LogicalOp.Or;
167
+ return this;
168
+ }
169
+ group(builderFn) {
170
+ const inner = builderFn(new FilterBuilder());
171
+ const filter = inner.build();
172
+ this.conditions.push({
173
+ operator: filter.operator,
174
+ conditions: filter.conditions,
175
+ });
176
+ return this;
177
+ }
178
+ addCondition(condition) {
179
+ if (this.pendingOperator !== null) {
180
+ if (this.pendingOperator === types_1.LogicalOp.Or &&
181
+ this.currentOperator === types_1.LogicalOp.And) {
182
+ this.currentOperator = types_1.LogicalOp.Or;
183
+ }
184
+ this.pendingOperator = null;
185
+ }
186
+ this.conditions.push(condition);
187
+ }
188
+ build() {
189
+ return {
190
+ operator: this.currentOperator,
191
+ conditions: [...this.conditions],
192
+ };
193
+ }
194
+ toExpression() {
195
+ const filter = this.build();
196
+ return groupToExpression({
197
+ operator: filter.operator,
198
+ conditions: filter.conditions,
199
+ });
200
+ }
201
+ toJson() {
202
+ return JSON.stringify(this.build());
203
+ }
204
+ }
205
+ exports.FilterBuilder = FilterBuilder;
206
+ function eq(field, value) {
207
+ return FilterBuilder.new().eq(field, value).build();
208
+ }
209
+ function ne(field, value) {
210
+ return FilterBuilder.new().ne(field, value).build();
211
+ }
212
+ function gt(field, value) {
213
+ return FilterBuilder.new().gt(field, value).build();
214
+ }
215
+ function lt(field, value) {
216
+ return FilterBuilder.new().lt(field, value).build();
217
+ }
218
+ function inList(field, values) {
219
+ return FilterBuilder.new().inList(field, values).build();
220
+ }
221
+ function range(field, min, max) {
222
+ return FilterBuilder.new().range(field, min, max).build();
223
+ }
224
+ function andFilters(filters) {
225
+ const conditions = filters.flatMap((f) => f.conditions);
226
+ return { operator: types_1.LogicalOp.And, conditions };
227
+ }
228
+ function orFilters(filters) {
229
+ const conditions = filters.map((f) => ({
230
+ operator: f.operator,
231
+ conditions: f.conditions,
232
+ }));
233
+ return { operator: types_1.LogicalOp.Or, conditions };
234
+ }
235
+ function filterToExpression(filter) {
236
+ return groupToExpression({
237
+ operator: filter.operator,
238
+ conditions: filter.conditions,
239
+ });
240
+ }
241
+ //# sourceMappingURL=filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"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"}