elasticlink 1.0.0-beta.1 → 1.0.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 (64) hide show
  1. package/README.md +74 -31
  2. package/dist/index.cjs +1528 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.cts +1890 -0
  5. package/dist/index.d.cts.map +1 -0
  6. package/dist/index.d.ts +1889 -20
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1474 -18
  9. package/dist/index.js.map +1 -0
  10. package/package.json +27 -21
  11. package/dist/aggregation.builder.d.ts +0 -6
  12. package/dist/aggregation.builder.d.ts.map +0 -1
  13. package/dist/aggregation.builder.js +0 -81
  14. package/dist/aggregation.types.d.ts +0 -258
  15. package/dist/aggregation.types.d.ts.map +0 -1
  16. package/dist/aggregation.types.js +0 -6
  17. package/dist/bulk.builder.d.ts +0 -29
  18. package/dist/bulk.builder.d.ts.map +0 -1
  19. package/dist/bulk.builder.js +0 -51
  20. package/dist/bulk.types.d.ts +0 -47
  21. package/dist/bulk.types.d.ts.map +0 -1
  22. package/dist/bulk.types.js +0 -6
  23. package/dist/field.helpers.d.ts +0 -241
  24. package/dist/field.helpers.d.ts.map +0 -1
  25. package/dist/field.helpers.js +0 -333
  26. package/dist/field.types.d.ts +0 -348
  27. package/dist/field.types.d.ts.map +0 -1
  28. package/dist/field.types.js +0 -6
  29. package/dist/index-management.builder.d.ts +0 -38
  30. package/dist/index-management.builder.d.ts.map +0 -1
  31. package/dist/index-management.builder.js +0 -69
  32. package/dist/index-management.types.d.ts +0 -136
  33. package/dist/index-management.types.d.ts.map +0 -1
  34. package/dist/index-management.types.js +0 -6
  35. package/dist/mapping.builder.d.ts +0 -53
  36. package/dist/mapping.builder.d.ts.map +0 -1
  37. package/dist/mapping.builder.js +0 -39
  38. package/dist/mapping.types.d.ts +0 -200
  39. package/dist/mapping.types.d.ts.map +0 -1
  40. package/dist/mapping.types.js +0 -6
  41. package/dist/multi-search.builder.d.ts +0 -23
  42. package/dist/multi-search.builder.d.ts.map +0 -1
  43. package/dist/multi-search.builder.js +0 -48
  44. package/dist/multi-search.types.d.ts +0 -50
  45. package/dist/multi-search.types.d.ts.map +0 -1
  46. package/dist/multi-search.types.js +0 -6
  47. package/dist/query.builder.d.ts +0 -4
  48. package/dist/query.builder.d.ts.map +0 -1
  49. package/dist/query.builder.js +0 -329
  50. package/dist/query.types.d.ts +0 -468
  51. package/dist/query.types.d.ts.map +0 -1
  52. package/dist/query.types.js +0 -7
  53. package/dist/settings.presets.d.ts +0 -117
  54. package/dist/settings.presets.d.ts.map +0 -1
  55. package/dist/settings.presets.js +0 -137
  56. package/dist/suggester.builder.d.ts +0 -23
  57. package/dist/suggester.builder.d.ts.map +0 -1
  58. package/dist/suggester.builder.js +0 -51
  59. package/dist/suggester.types.d.ts +0 -90
  60. package/dist/suggester.types.d.ts.map +0 -1
  61. package/dist/suggester.types.js +0 -6
  62. package/dist/vector.types.d.ts +0 -17
  63. package/dist/vector.types.d.ts.map +0 -1
  64. package/dist/vector.types.js +0 -6
@@ -1,329 +0,0 @@
1
- import { createAggregationBuilder } from './aggregation.builder.js';
2
- import { createSuggesterBuilder } from './suggester.builder.js';
3
- // prettier-ignore
4
- const resolveCondition = (c) => typeof c === 'function'
5
- ? resolveCondition(c())
6
- : typeof c === 'boolean'
7
- ? c
8
- : c != null;
9
- // wrap accepts `any` because this factory is shared: ClauseBuilder callers pass a wrap that returns raw DSL
10
- // objects, while QueryBuilder callers pass a wrap that returns a new QueryBuilder<M>. The generic R captures
11
- // the difference at each call site — `any` avoids a union type that would make every method's return type unreadable.
12
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
- const createClauseMethods = (wrap, qualifyField = (f) => f) => ({
14
- // eslint-disable-next-line functional/functional-parameters
15
- matchAll: () => wrap({ match_all: {} }),
16
- // eslint-disable-next-line functional/functional-parameters
17
- matchNone: () => wrap({ match_none: {} }),
18
- match: (field, value, options) => wrap({ match: { [qualifyField(field)]: options ? { query: value, ...options } : value } }),
19
- multiMatch: (fields, query, options) => wrap({ multi_match: { fields: fields.map(qualifyField), query, ...options } }),
20
- matchPhrase: (field, query) => wrap({ match_phrase: { [qualifyField(field)]: query } }),
21
- matchPhrasePrefix: (field, value, options) => wrap({ match_phrase_prefix: { [qualifyField(field)]: options ? { query: value, ...options } : value } }),
22
- term: (field, value) => wrap({ term: { [qualifyField(field)]: value } }),
23
- terms: (field, value) => wrap({ terms: { [qualifyField(field)]: value } }),
24
- range: (field, conditions) => wrap({ range: { [qualifyField(field)]: conditions } }),
25
- exists: (field) => wrap({ exists: { field: qualifyField(field) } }),
26
- prefix: (field, value) => wrap({ prefix: { [qualifyField(field)]: value } }),
27
- wildcard: (field, value) => wrap({ wildcard: { [qualifyField(field)]: value } }),
28
- fuzzy: (field, value, options) => wrap({ fuzzy: { [qualifyField(field)]: options ? { value, ...options } : { value } } }),
29
- ids: (values) => wrap({ ids: { values } }),
30
- script: (options) => {
31
- const { source, lang = 'painless', params, boost } = options;
32
- return wrap({
33
- script: {
34
- script: { source, lang, ...(params !== undefined && { params }) },
35
- ...(boost !== undefined && { boost })
36
- }
37
- });
38
- },
39
- combinedFields: (fields, query, options) => wrap({ combined_fields: { fields: fields.map(qualifyField), query, ...options } }),
40
- queryString: (query, options) => wrap({ query_string: { query, ...options } }),
41
- simpleQueryString: (query, options) => wrap({ simple_query_string: { query, ...options } }),
42
- moreLikeThis: (fields, like, options) => wrap({
43
- more_like_this: {
44
- fields: fields.map(qualifyField),
45
- like: Array.isArray(like) ? like : [like],
46
- ...options
47
- }
48
- }),
49
- matchBoolPrefix: (field, value, options) => wrap({ match_bool_prefix: { [qualifyField(field)]: options ? { query: value, ...options } : value } }),
50
- regexp: (field, value, options) => wrap({ regexp: { [qualifyField(field)]: options ? { value, ...options } : value } }),
51
- geoDistance: (field, center, options) => wrap({ geo_distance: { [qualifyField(field)]: center, ...options } }),
52
- geoBoundingBox: (field, options) => wrap({ geo_bounding_box: { [qualifyField(field)]: options } }),
53
- geoPolygon: (field, options) => wrap({ geo_polygon: { [qualifyField(field)]: options } }),
54
- geoShape: (field, shape, options) => wrap({ geo_shape: { [qualifyField(field)]: { shape, ...options } } }),
55
- distanceFeature: (field, options) => wrap({ distance_feature: { field: qualifyField(field), ...options } }),
56
- rankFeature: (field, options) => wrap({ rank_feature: { field: qualifyField(field), ...options } }),
57
- sparseVector: (field, options) => wrap({ sparse_vector: { field: qualifyField(field), ...options } }),
58
- intervals: (field, options) => wrap({ intervals: { [qualifyField(field)]: options } }),
59
- spanTerm: (field, value) => wrap({ span_term: { [qualifyField(field)]: { value } } }),
60
- spanNear: (clauses, options) => wrap({ span_near: { clauses: [...clauses], ...options } }),
61
- spanOr: (clauses) => wrap({ span_or: { clauses: [...clauses] } }),
62
- spanNot: (include, exclude, options) => wrap({ span_not: { include, exclude, ...options } }),
63
- spanFirst: (match, end) => wrap({ span_first: { match, end } }),
64
- spanContaining: (big, little) => wrap({ span_containing: { big, little } }),
65
- spanWithin: (big, little) => wrap({ span_within: { big, little } }),
66
- spanMultiTerm: (query) => wrap({ span_multi: { match: query } }),
67
- spanFieldMasking: (field, query) => wrap({ span_field_masking: { field: qualifyField(field), query } })
68
- });
69
- const createClauseBuilder = (prefix) => {
70
- const qualifyField = prefix ? (f) => `${prefix}.${f}` : (f) => f;
71
- return {
72
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
73
- ...createClauseMethods((dsl) => dsl, qualifyField),
74
- knn: (field, queryVector, options) => {
75
- const { k, num_candidates, ...restOptions } = options;
76
- return {
77
- knn: {
78
- field: qualifyField(field),
79
- query_vector: queryVector,
80
- k,
81
- num_candidates,
82
- ...restOptions
83
- }
84
- };
85
- },
86
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
87
- nested: (path, fn, options) => {
88
- const nestedPath = prefix ? `${prefix}.${path}` : path;
89
- const nestedQuery = fn(createClauseBuilder(nestedPath));
90
- return nestedQuery === undefined ? undefined : { nested: { path: nestedPath, query: nestedQuery, ...options } };
91
- },
92
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
93
- functionScore: (queryFn, options) => {
94
- const innerQuery = queryFn(createClauseBuilder(prefix)) ?? { match_all: {} };
95
- return { function_score: { query: innerQuery, ...options } };
96
- },
97
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
98
- hasChild: (type, queryFn, options) => {
99
- const childQuery = queryFn(createClauseBuilder()) ?? { match_all: {} };
100
- return { has_child: { type, query: childQuery, ...options } };
101
- },
102
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
103
- hasParent: (type, queryFn, options) => {
104
- const parentQuery = queryFn(createClauseBuilder()) ?? { match_all: {} };
105
- return { has_parent: { parent_type: type, query: parentQuery, ...options } };
106
- },
107
- parentId: (type, id, options) => ({
108
- parent_id: { type, id, ...options }
109
- }),
110
- when: (condition, thenFn) => (resolveCondition(condition) ? thenFn(createClauseBuilder(prefix)) : undefined)
111
- };
112
- };
113
- export const createQueryBuilder = (state = {}) => {
114
- const q = (state.query ?? {});
115
- return {
116
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
117
- ...createClauseMethods((dsl) => createQueryBuilder({ ...state, query: dsl })),
118
- // eslint-disable-next-line functional/functional-parameters
119
- bool: () => createQueryBuilder({ ...state, query: { bool: {} } }),
120
- must: (builderFn) => {
121
- const clause = builderFn(createClauseBuilder());
122
- const existing = q.bool?.must ?? [];
123
- return clause === undefined
124
- ? createQueryBuilder(state)
125
- : createQueryBuilder({
126
- ...state,
127
- query: { bool: { ...q.bool, must: [...existing, clause] } }
128
- });
129
- },
130
- mustNot: (builderFn) => {
131
- const clause = builderFn(createClauseBuilder());
132
- const existing = q.bool?.must_not ?? [];
133
- return clause === undefined
134
- ? createQueryBuilder(state)
135
- : createQueryBuilder({
136
- ...state,
137
- query: { bool: { ...q.bool, must_not: [...existing, clause] } }
138
- });
139
- },
140
- should: (builderFn) => {
141
- const clause = builderFn(createClauseBuilder());
142
- const existing = q.bool?.should ?? [];
143
- return clause === undefined
144
- ? createQueryBuilder(state)
145
- : createQueryBuilder({
146
- ...state,
147
- query: { bool: { ...q.bool, should: [...existing, clause] } }
148
- });
149
- },
150
- filter: (builderFn) => {
151
- const clause = builderFn(createClauseBuilder());
152
- const existing = q.bool?.filter ?? [];
153
- return clause === undefined
154
- ? createQueryBuilder(state)
155
- : createQueryBuilder({
156
- ...state,
157
- query: { bool: { ...q.bool, filter: [...existing, clause] } }
158
- });
159
- },
160
- minimumShouldMatch: (value) => createQueryBuilder({
161
- ...state,
162
- query: { bool: { ...q.bool, minimum_should_match: value } }
163
- }),
164
- knn: (field, queryVector, options) => {
165
- const { k, num_candidates, ...restOptions } = options;
166
- return createQueryBuilder({
167
- ...state,
168
- knn: {
169
- field,
170
- query_vector: queryVector,
171
- k,
172
- num_candidates,
173
- ...restOptions
174
- }
175
- });
176
- },
177
- nested: (path, fn, options) => {
178
- const nestedQuery = fn(createClauseBuilder(path));
179
- return nestedQuery === undefined
180
- ? createQueryBuilder(state)
181
- : createQueryBuilder({
182
- ...state,
183
- query: { nested: { path, query: nestedQuery, ...options } }
184
- });
185
- },
186
- scriptScore: (queryFn, script, options) => {
187
- const innerQuery = queryFn(createClauseBuilder()) ?? { match_all: {} };
188
- const { source, lang = 'painless', params } = script;
189
- return createQueryBuilder({
190
- ...state,
191
- query: {
192
- script_score: {
193
- query: innerQuery,
194
- script: { source, lang, ...(params !== undefined && { params }) },
195
- ...(options?.min_score !== undefined && { min_score: options.min_score }),
196
- ...(options?.boost !== undefined && { boost: options.boost })
197
- }
198
- }
199
- });
200
- },
201
- percolate: (options) => createQueryBuilder({ ...state, query: { percolate: { ...options } } }),
202
- functionScore: (queryFn, options) => {
203
- const innerQuery = queryFn(createClauseBuilder()) ?? { match_all: {} };
204
- return createQueryBuilder({
205
- ...state,
206
- query: { function_score: { query: innerQuery, ...options } }
207
- });
208
- },
209
- hasChild: (type, queryFn, options) => {
210
- const childQuery = queryFn(createClauseBuilder()) ?? { match_all: {} };
211
- return createQueryBuilder({
212
- ...state,
213
- query: { has_child: { type, query: childQuery, ...options } }
214
- });
215
- },
216
- hasParent: (type, queryFn, options) => {
217
- const parentQuery = queryFn(createClauseBuilder()) ?? { match_all: {} };
218
- return createQueryBuilder({
219
- ...state,
220
- query: { has_parent: { parent_type: type, query: parentQuery, ...options } }
221
- });
222
- },
223
- parentId: (type, id, options) => createQueryBuilder({ ...state, query: { parent_id: { type, id, ...options } } }),
224
- when: (condition, thenFn) => resolveCondition(condition) ? thenFn(createQueryBuilder(state)) : createQueryBuilder(state),
225
- sort: (field, direction = 'asc') => {
226
- const existing = state.sort || [];
227
- return createQueryBuilder({
228
- ...state,
229
- sort: [...existing, { [field]: direction }]
230
- });
231
- },
232
- from: (from) => createQueryBuilder({ ...state, from }),
233
- size: (size) => createQueryBuilder({ ...state, size }),
234
- _source: (_source) => createQueryBuilder({ ...state, _source }),
235
- sourceIncludes: (paths) => createQueryBuilder({ ...state, _source_includes: paths }),
236
- sourceExcludes: (paths) => createQueryBuilder({ ...state, _source_excludes: paths }),
237
- runtimeMappings: (runtime_mappings) => createQueryBuilder({ ...state, runtime_mappings }),
238
- docValueFields: (docvalue_fields) => createQueryBuilder({ ...state, docvalue_fields }),
239
- fields: (fields) => createQueryBuilder({ ...state, fields }),
240
- postFilter: (fn) => {
241
- const clause = fn(createClauseBuilder());
242
- return clause === undefined
243
- ? createQueryBuilder(state)
244
- : createQueryBuilder({ ...state, post_filter: clause });
245
- },
246
- scriptFields: (script_fields) => createQueryBuilder({ ...state, script_fields }),
247
- timeout: (timeout) => createQueryBuilder({ ...state, timeout }),
248
- trackScores: (track_scores) => createQueryBuilder({ ...state, track_scores }),
249
- explain: (explain) => createQueryBuilder({ ...state, explain }),
250
- minScore: (min_score) => createQueryBuilder({ ...state, min_score }),
251
- version: (version) => createQueryBuilder({ ...state, version }),
252
- seqNoPrimaryTerm: (seq_no_primary_term) => createQueryBuilder({ ...state, seq_no_primary_term }),
253
- trackTotalHits: (track_total_hits = true) => createQueryBuilder({ ...state, track_total_hits }),
254
- highlight: (fields, options) => {
255
- const { pre_tags, post_tags, ...fieldOptions } = options || {};
256
- const fieldValue = Object.keys(fieldOptions).length > 0 ? fieldOptions : {};
257
- const highlightFields = Object.fromEntries(fields.map((field) => [field, fieldValue]));
258
- return createQueryBuilder({
259
- ...state,
260
- highlight: {
261
- fields: highlightFields,
262
- ...(pre_tags && { pre_tags }),
263
- ...(post_tags && { post_tags })
264
- }
265
- });
266
- },
267
- constantScore: (fn, options) => {
268
- const clause = fn(createClauseBuilder());
269
- return createQueryBuilder({
270
- ...state,
271
- query: {
272
- constant_score: {
273
- filter: clause,
274
- ...options
275
- }
276
- }
277
- });
278
- },
279
- searchAfter: (values) => createQueryBuilder({ ...state, search_after: values }),
280
- preference: (value) => createQueryBuilder({ ...state, preference: value }),
281
- collapse: (field, options) => createQueryBuilder({
282
- ...state,
283
- collapse: {
284
- field,
285
- ...options
286
- }
287
- }),
288
- rescore: (queryFn, windowSize, options) => {
289
- const rescoreQuery = queryFn(createClauseBuilder());
290
- return createQueryBuilder({
291
- ...state,
292
- rescore: {
293
- window_size: windowSize,
294
- query: {
295
- rescore_query: rescoreQuery,
296
- ...options
297
- }
298
- }
299
- });
300
- },
301
- storedFields: (fields) => createQueryBuilder({ ...state, stored_fields: fields }),
302
- terminateAfter: (count) => createQueryBuilder({ ...state, terminate_after: count }),
303
- pit: (id, keepAlive) => createQueryBuilder({ ...state, pit: { id, keep_alive: keepAlive } }),
304
- indicesBoost: (boosts) => createQueryBuilder({ ...state, indices_boost: boosts }),
305
- aggs: (fn) => {
306
- const aggBuilder = createAggregationBuilder();
307
- const builtAggs = fn(aggBuilder).build();
308
- return createQueryBuilder({ ...state, aggs: builtAggs });
309
- },
310
- suggest: (fn) => {
311
- const suggesterBuilder = createSuggesterBuilder();
312
- const builtSuggestions = fn(suggesterBuilder).build();
313
- return createQueryBuilder({
314
- ...state,
315
- suggest: builtSuggestions.suggest
316
- });
317
- },
318
- // eslint-disable-next-line functional/functional-parameters
319
- build: () => {
320
- const { _includeQuery, ...rest } = state;
321
- // eslint-disable-next-line functional/no-conditional-statements
322
- if (_includeQuery === false) {
323
- const { query: _q, ...noQuery } = rest;
324
- return noQuery;
325
- }
326
- return rest;
327
- }
328
- };
329
- };