elasticlink 0.8.0-beta → 1.0.0-beta.2
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.
- package/README.md +631 -819
- package/dist/index.cjs +1528 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1890 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +1889 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1474 -18
- package/dist/index.js.map +1 -0
- package/package.json +25 -19
- package/dist/aggregation.builder.d.ts +0 -6
- package/dist/aggregation.builder.d.ts.map +0 -1
- package/dist/aggregation.builder.js +0 -64
- package/dist/aggregation.types.d.ts +0 -173
- package/dist/aggregation.types.d.ts.map +0 -1
- package/dist/aggregation.types.js +0 -6
- package/dist/bulk.builder.d.ts +0 -28
- package/dist/bulk.builder.d.ts.map +0 -1
- package/dist/bulk.builder.js +0 -51
- package/dist/bulk.types.d.ts +0 -46
- package/dist/bulk.types.d.ts.map +0 -1
- package/dist/bulk.types.js +0 -6
- package/dist/field.helpers.d.ts +0 -167
- package/dist/field.helpers.d.ts.map +0 -1
- package/dist/field.helpers.js +0 -282
- package/dist/field.types.d.ts +0 -255
- package/dist/field.types.d.ts.map +0 -1
- package/dist/field.types.js +0 -6
- package/dist/index-management.builder.d.ts +0 -33
- package/dist/index-management.builder.d.ts.map +0 -1
- package/dist/index-management.builder.js +0 -64
- package/dist/index-management.types.d.ts +0 -126
- package/dist/index-management.types.d.ts.map +0 -1
- package/dist/index-management.types.js +0 -6
- package/dist/mapping.builder.d.ts +0 -46
- package/dist/mapping.builder.d.ts.map +0 -1
- package/dist/mapping.builder.js +0 -39
- package/dist/mapping.types.d.ts +0 -160
- package/dist/mapping.types.d.ts.map +0 -1
- package/dist/mapping.types.js +0 -6
- package/dist/multi-search.builder.d.ts +0 -22
- package/dist/multi-search.builder.d.ts.map +0 -1
- package/dist/multi-search.builder.js +0 -39
- package/dist/multi-search.types.d.ts +0 -36
- package/dist/multi-search.types.d.ts.map +0 -1
- package/dist/multi-search.types.js +0 -6
- package/dist/query.builder.d.ts +0 -4
- package/dist/query.builder.d.ts.map +0 -1
- package/dist/query.builder.js +0 -264
- package/dist/query.types.d.ts +0 -324
- package/dist/query.types.d.ts.map +0 -1
- package/dist/query.types.js +0 -7
- package/dist/settings.presets.d.ts +0 -98
- package/dist/settings.presets.d.ts.map +0 -1
- package/dist/settings.presets.js +0 -115
- package/dist/suggester.builder.d.ts +0 -23
- package/dist/suggester.builder.d.ts.map +0 -1
- package/dist/suggester.builder.js +0 -51
- package/dist/suggester.types.d.ts +0 -50
- package/dist/suggester.types.d.ts.map +0 -1
- package/dist/suggester.types.js +0 -6
- package/dist/vector.types.d.ts +0 -17
- package/dist/vector.types.d.ts.map +0 -1
- package/dist/vector.types.js +0 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../src/aggregation.builder.ts","../src/suggester.builder.ts","../src/query.builder.ts","../src/mapping.builder.ts","../src/field.helpers.ts","../src/multi-search.builder.ts","../src/bulk.builder.ts","../src/index-management.builder.ts","../src/settings.presets.ts","../src/index.ts"],"sourcesContent":["import type { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types';\nimport type { FieldTypeString } from './index-management.types.js';\nimport type { MappingsSchema, NestedPathFields, SubFieldsOf } from './mapping.types.js';\nimport type {\n RootAggregationBuilder,\n NestedEntryBuilder,\n NestedAggregationBuilder,\n AggregationState,\n TermsAggOptions,\n DateHistogramAggOptions,\n RangeAggOptions,\n HistogramAggOptions,\n AvgAggOptions,\n SumAggOptions,\n MinAggOptions,\n MaxAggOptions,\n CardinalityAggOptions,\n PercentilesAggOptions,\n StatsAggOptions,\n ValueCountAggOptions,\n ExtendedStatsAggOptions,\n TopHitsAggOptions,\n AutoDateHistogramAggOptions,\n CompositeAggSource,\n CompositeAggOptions,\n DateRangeAggOptions,\n FiltersAggOptions,\n SignificantTermsAggOptions,\n RareTermsAggOptions,\n MultiTermsAggOptions,\n GeoDistanceAggOptions,\n GeohashGridAggOptions,\n GeotileGridAggOptions,\n GeoBoundsAggOptions,\n GeoCentroidAggOptions,\n MissingAggOptions,\n TopMetricsAggOptions,\n WeightedAvgAggOptions,\n BucketScriptAggOptions,\n BucketSelectorAggOptions,\n DerivativeAggOptions,\n CumulativeSumAggOptions\n} from './aggregation.types.js';\n\n// Shared metric/bucket method implementations — return type is `any` so the same code\n// can be spread into RootAggregationBuilder, NestedEntryBuilder, and NestedAggregationBuilder.\n// The actual return-type contracts are enforced by the public factory return-type annotations.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst sharedAggMethods = (state: AggregationState, rebuild: (s: AggregationState) => any) => ({\n terms: (name: string, field: string, options?: TermsAggOptions) =>\n rebuild({ ...state, [name]: { terms: { field, ...options } } }),\n\n dateHistogram: (name: string, field: string, options?: DateHistogramAggOptions) =>\n rebuild({ ...state, [name]: { date_histogram: { field, ...options } } }),\n\n range: (name: string, field: string, options?: RangeAggOptions) =>\n rebuild({ ...state, [name]: { range: { field, ...options } } }),\n\n dateRange: (name: string, field: string, options?: DateRangeAggOptions) =>\n rebuild({ ...state, [name]: { date_range: { field, ...options } } }),\n\n filters: (name: string, filters: Record<string, QueryDslQueryContainer>, options?: FiltersAggOptions) =>\n rebuild({ ...state, [name]: { filters: { filters, ...options } } }),\n\n significantTerms: (name: string, field: string, options?: SignificantTermsAggOptions) =>\n rebuild({ ...state, [name]: { significant_terms: { field, ...options } } }),\n\n histogram: (name: string, field: string, options?: HistogramAggOptions) =>\n rebuild({ ...state, [name]: { histogram: { field, ...options } } }),\n\n avg: (name: string, field: string, options?: AvgAggOptions) =>\n rebuild({ ...state, [name]: { avg: { field, ...options } } }),\n\n sum: (name: string, field: string, options?: SumAggOptions) =>\n rebuild({ ...state, [name]: { sum: { field, ...options } } }),\n\n min: (name: string, field: string, options?: MinAggOptions) =>\n rebuild({ ...state, [name]: { min: { field, ...options } } }),\n\n max: (name: string, field: string, options?: MaxAggOptions) =>\n rebuild({ ...state, [name]: { max: { field, ...options } } }),\n\n cardinality: (name: string, field: string, options?: CardinalityAggOptions) =>\n rebuild({ ...state, [name]: { cardinality: { field, ...options } } }),\n\n percentiles: (name: string, field: string, options?: PercentilesAggOptions) =>\n rebuild({ ...state, [name]: { percentiles: { field, ...options } } }),\n\n stats: (name: string, field: string, options?: StatsAggOptions) =>\n rebuild({ ...state, [name]: { stats: { field, ...options } } }),\n\n valueCount: (name: string, field: string, options?: ValueCountAggOptions) =>\n rebuild({ ...state, [name]: { value_count: { field, ...options } } }),\n\n extendedStats: (name: string, field: string, options?: ExtendedStatsAggOptions) =>\n rebuild({ ...state, [name]: { extended_stats: { field, ...options } } }),\n\n topHits: (name: string, options?: TopHitsAggOptions) => rebuild({ ...state, [name]: { top_hits: { ...options } } }),\n\n autoDateHistogram: (name: string, field: string, options?: AutoDateHistogramAggOptions) =>\n rebuild({ ...state, [name]: { auto_date_histogram: { field, ...options } } }),\n\n composite: (name: string, sources: CompositeAggSource[], options?: CompositeAggOptions) =>\n rebuild({ ...state, [name]: { composite: { sources, ...options } } }),\n\n filter: (name: string, query: QueryDslQueryContainer) => rebuild({ ...state, [name]: { filter: query } }),\n\n rareTerms: (name: string, field: string, options?: RareTermsAggOptions) =>\n rebuild({ ...state, [name]: { rare_terms: { field, ...options } } }),\n\n multiTerms: (name: string, options: MultiTermsAggOptions) =>\n rebuild({ ...state, [name]: { multi_terms: { ...options } } }),\n\n geoDistance: (name: string, field: string, options: GeoDistanceAggOptions) =>\n rebuild({ ...state, [name]: { geo_distance: { field, ...options } } }),\n\n geohashGrid: (name: string, field: string, options?: GeohashGridAggOptions) =>\n rebuild({ ...state, [name]: { geohash_grid: { field, ...options } } }),\n\n geotileGrid: (name: string, field: string, options?: GeotileGridAggOptions) =>\n rebuild({ ...state, [name]: { geotile_grid: { field, ...options } } }),\n\n geoBounds: (name: string, field: string, options?: GeoBoundsAggOptions) =>\n rebuild({ ...state, [name]: { geo_bounds: { field, ...options } } }),\n\n geoCentroid: (name: string, field: string, options?: GeoCentroidAggOptions) =>\n rebuild({ ...state, [name]: { geo_centroid: { field, ...options } } }),\n\n missing: (name: string, field: string, options?: MissingAggOptions) =>\n rebuild({ ...state, [name]: { missing: { field, ...options } } }),\n\n topMetrics: (name: string, options: TopMetricsAggOptions) =>\n rebuild({ ...state, [name]: { top_metrics: { ...options } } }),\n\n weightedAvg: (name: string, options: WeightedAvgAggOptions) =>\n rebuild({ ...state, [name]: { weighted_avg: { ...options } } }),\n\n bucketScript: (name: string, options: BucketScriptAggOptions) =>\n rebuild({ ...state, [name]: { bucket_script: { ...options } } }),\n\n bucketSelector: (name: string, options: BucketSelectorAggOptions) =>\n rebuild({ ...state, [name]: { bucket_selector: { ...options } } }),\n\n derivative: (name: string, options: DerivativeAggOptions) =>\n rebuild({ ...state, [name]: { derivative: { ...options } } }),\n\n cumulativeSum: (name: string, options: CumulativeSumAggOptions) =>\n rebuild({ ...state, [name]: { cumulative_sum: { ...options } } }),\n\n // eslint-disable-next-line functional/functional-parameters\n build: () => state\n});\n\nconst attachSubAgg = (state: AggregationState, subAggState: AggregationState): AggregationState => {\n const lastKey = Object.keys(state).at(-1)!;\n const existing = state[lastKey].aggs ?? {};\n return { ...state, [lastKey]: { ...state[lastKey], aggs: { ...existing, ...subAggState } } };\n};\n\n// Function declarations are used for the internal factories (vs const arrows) so that mutual\n// recursion between createNestedEntryBuilder and createNestedAggregationBuilder is hoisted.\n\nfunction createNestedEntryBuilder<\n M extends Record<string, FieldTypeString>,\n N extends Record<string, FieldTypeString>,\n Root extends Record<string, FieldTypeString> = M\n>(\n state: AggregationState,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rebuild: (state: AggregationState) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): NestedEntryBuilder<M, N, any, Root> {\n return {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...(sharedAggMethods(state, rebuild) as any),\n\n global: (name: string) => createAggregationBuilder<M>({ ...state, [name]: { global: {} } }),\n\n nested: <K extends NestedPathFields<M> & string>(name: string, path: K) =>\n createNestedEntryBuilder<M, SubFieldsOf<M, K>, Root>({ ...state, [name]: { nested: { path } } }, rebuild),\n\n subAgg: (fn: (agg: NestedAggregationBuilder<N, Root>) => NestedAggregationBuilder<N, Root>) =>\n rebuild(attachSubAgg(state, fn(createNestedAggregationBuilder<N, Root>()).build()))\n };\n}\n\nfunction createNestedAggregationBuilder<\n N extends Record<string, FieldTypeString>,\n Root extends Record<string, FieldTypeString> = N\n>(state: AggregationState = {}): NestedAggregationBuilder<N, Root> {\n return {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...(sharedAggMethods(state, createNestedAggregationBuilder<N, Root>) as any),\n\n nested: <K extends NestedPathFields<N> & string>(name: string, path: K) =>\n createNestedEntryBuilder<N, SubFieldsOf<N, K>, Root>(\n { ...state, [name]: { nested: { path } } },\n createNestedAggregationBuilder<N, Root>\n ),\n\n reverseNested: (name: string, path?: string) =>\n createNestedAggregationBuilder<Root, Root>({ ...state, [name]: { reverse_nested: path ? { path } : {} } }),\n\n subAgg: (fn: (agg: NestedAggregationBuilder<N, Root>) => NestedAggregationBuilder<N, Root>) =>\n createNestedAggregationBuilder<N, Root>(\n attachSubAgg(state, fn(createNestedAggregationBuilder<N, Root>()).build())\n )\n };\n}\n\nexport function createAggregationBuilder<M extends Record<string, FieldTypeString>>(\n state: AggregationState = {}\n): RootAggregationBuilder<M> {\n return {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...(sharedAggMethods(state, createAggregationBuilder<M>) as any),\n\n global: (name: string) => createAggregationBuilder<M>({ ...state, [name]: { global: {} } }),\n\n nested: <K extends NestedPathFields<M> & string>(name: string, path: K) =>\n createNestedEntryBuilder<M, SubFieldsOf<M, K>, M>(\n { ...state, [name]: { nested: { path } } },\n createAggregationBuilder<M>\n ),\n\n subAgg: (fn: (agg: RootAggregationBuilder<M>) => RootAggregationBuilder<M>) =>\n createAggregationBuilder<M>(attachSubAgg(state, fn(createAggregationBuilder<M>()).build()))\n };\n}\n\nexport const aggregations = <M extends Record<string, FieldTypeString>>(_schema: MappingsSchema<M>) =>\n createAggregationBuilder<M>();\n","/**\n * Suggester builder\n * Provides query suggestions, phrase corrections, and autocomplete functionality\n */\n\nimport type { FieldTypeString } from './index-management.types.js';\nimport type { MappingsSchema } from './mapping.types.js';\nimport { SuggesterBuilder, SuggesterState } from './suggester.types.js';\n\n/**\n * Creates a suggester builder\n * @returns SuggesterBuilder instance\n */\nexport const createSuggesterBuilder = <M extends Record<string, FieldTypeString>>(\n state: SuggesterState = {}\n): SuggesterBuilder<M> => ({\n term: (name, text, options) => {\n return createSuggesterBuilder<M>({\n ...state,\n [name]: {\n text,\n term: options\n }\n });\n },\n\n phrase: (name, text, options) => {\n return createSuggesterBuilder<M>({\n ...state,\n [name]: {\n text,\n phrase: options\n }\n });\n },\n\n completion: (name, prefix, options) => {\n return createSuggesterBuilder<M>({\n ...state,\n [name]: {\n prefix,\n completion: options\n }\n });\n },\n\n // eslint-disable-next-line functional/functional-parameters\n build: () => ({\n suggest: state\n })\n});\n\n/**\n * Factory function to create a new suggester builder\n * @example\n * ```typescript\n * const suggestions = suggest(productMappings)\n * .term('name-suggestions', 'laptop', { field: 'name', size: 5 })\n * .build();\n * ```\n */\nexport const suggest = <M extends Record<string, FieldTypeString>>(_schema: MappingsSchema<M>) =>\n createSuggesterBuilder<M>();\n","import type { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types';\nimport type { FieldTypeString } from './index-management.types.js';\nimport type {\n QueryState,\n QueryBuilder,\n ClauseBuilder,\n MatchOptions,\n MultiMatchOptions,\n MatchPhrasePrefixOptions,\n FuzzyOptions,\n CombinedFieldsOptions,\n QueryStringOptions,\n SimpleQueryStringOptions,\n MoreLikeThisOptions,\n MatchBoolPrefixOptions,\n NestedOptions,\n ScriptQueryOptions,\n HighlightOptions,\n RegexpOptions,\n GeoDistanceOptions,\n GeoBoundingBoxOptions,\n GeoPolygonOptions,\n GeoShapeQueryOptions,\n DistanceFeatureOptions,\n RankFeatureQueryOptions,\n SparseVectorQueryOptions,\n FunctionScoreOptions,\n HasChildOptions,\n HasParentOptions,\n ParentIdOptions,\n IntervalsOptions,\n SpanNearOptions,\n SpanNotOptions,\n SpanQuery\n} from './query.types.js';\nimport type { SubFieldsOf } from './mapping.types.js';\nimport type { KnnOptions } from './vector.types.js';\nimport { createAggregationBuilder } from './aggregation.builder.js';\nimport { createSuggesterBuilder } from './suggester.builder.js';\n\n// prettier-ignore\nconst resolveCondition = (c: unknown): boolean =>\n typeof c === 'function'\n ? resolveCondition((c as () => unknown)())\n : typeof c === 'boolean'\n ? c\n : c != null;\n\n// wrap accepts `any` because this factory is shared: ClauseBuilder callers pass a wrap that returns raw DSL\n// objects, while QueryBuilder callers pass a wrap that returns a new QueryBuilder<M>. The generic R captures\n// the difference at each call site — `any` avoids a union type that would make every method's return type unreadable.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst createClauseMethods = <R>(wrap: (dsl: any) => R, qualifyField: (f: string) => string = (f) => f) => ({\n // eslint-disable-next-line functional/functional-parameters\n matchAll: () => wrap({ match_all: {} }),\n\n // eslint-disable-next-line functional/functional-parameters\n matchNone: () => wrap({ match_none: {} }),\n\n match: (field: string, value: string, options?: MatchOptions) =>\n wrap({ match: { [qualifyField(field)]: options ? { query: value, ...options } : value } }),\n\n multiMatch: (fields: string[], query: string, options?: MultiMatchOptions) =>\n wrap({ multi_match: { fields: fields.map(qualifyField), query, ...options } }),\n\n matchPhrase: (field: string, query: string) => wrap({ match_phrase: { [qualifyField(field)]: query } }),\n\n matchPhrasePrefix: (field: string, value: string, options?: MatchPhrasePrefixOptions) =>\n wrap({ match_phrase_prefix: { [qualifyField(field)]: options ? { query: value, ...options } : value } }),\n\n term: (field: string, value: unknown) => wrap({ term: { [qualifyField(field)]: value } }),\n\n terms: (field: string, value: unknown[]) => wrap({ terms: { [qualifyField(field)]: value } }),\n\n range: (field: string, conditions: Record<string, unknown>) => wrap({ range: { [qualifyField(field)]: conditions } }),\n\n exists: (field: string) => wrap({ exists: { field: qualifyField(field) } }),\n\n prefix: (field: string, value: string) => wrap({ prefix: { [qualifyField(field)]: value } }),\n\n wildcard: (field: string, value: string) => wrap({ wildcard: { [qualifyField(field)]: value } }),\n\n fuzzy: (field: string, value: string, options?: FuzzyOptions) =>\n wrap({ fuzzy: { [qualifyField(field)]: options ? { value, ...options } : { value } } }),\n\n ids: (values: string[]) => wrap({ ids: { values } }),\n\n script: (options: ScriptQueryOptions) => {\n const { source, lang = 'painless', params, boost } = options;\n return wrap({\n script: {\n script: { source, lang, ...(params !== undefined && { params }) },\n ...(boost !== undefined && { boost })\n }\n });\n },\n\n combinedFields: (fields: string[], query: string, options?: CombinedFieldsOptions) =>\n wrap({ combined_fields: { fields: fields.map(qualifyField), query, ...options } }),\n\n queryString: (query: string, options?: QueryStringOptions) => wrap({ query_string: { query, ...options } }),\n\n simpleQueryString: (query: string, options?: SimpleQueryStringOptions) =>\n wrap({ simple_query_string: { query, ...options } }),\n\n moreLikeThis: (\n fields: string[],\n like: string | Array<string | { _index: string; _id: string }>,\n options?: MoreLikeThisOptions\n ) =>\n wrap({\n more_like_this: {\n fields: fields.map(qualifyField),\n like: Array.isArray(like) ? like : [like],\n ...options\n }\n }),\n\n matchBoolPrefix: (field: string, value: string, options?: MatchBoolPrefixOptions) =>\n wrap({ match_bool_prefix: { [qualifyField(field)]: options ? { query: value, ...options } : value } }),\n\n regexp: (field: string, value: string, options?: RegexpOptions) =>\n wrap({ regexp: { [qualifyField(field)]: options ? { value, ...options } : value } }),\n\n geoDistance: (field: string, center: { lat: number; lon: number }, options: GeoDistanceOptions) =>\n wrap({ geo_distance: { [qualifyField(field)]: center, ...options } }),\n\n geoBoundingBox: (field: string, options: GeoBoundingBoxOptions) =>\n wrap({ geo_bounding_box: { [qualifyField(field)]: options } }),\n\n geoPolygon: (field: string, options: GeoPolygonOptions) => wrap({ geo_polygon: { [qualifyField(field)]: options } }),\n\n geoShape: (field: string, shape: Record<string, unknown>, options?: GeoShapeQueryOptions) =>\n wrap({ geo_shape: { [qualifyField(field)]: { shape, ...options } } }),\n\n distanceFeature: (field: string, options: DistanceFeatureOptions) =>\n wrap({ distance_feature: { field: qualifyField(field), ...options } }),\n\n rankFeature: (field: string, options?: RankFeatureQueryOptions) =>\n wrap({ rank_feature: { field: qualifyField(field), ...options } }),\n\n sparseVector: (field: string, options: SparseVectorQueryOptions) =>\n wrap({ sparse_vector: { field: qualifyField(field), ...options } }),\n\n intervals: (field: string, options: IntervalsOptions) => wrap({ intervals: { [qualifyField(field)]: options } }),\n\n spanTerm: (field: string, value: string) => wrap({ span_term: { [qualifyField(field)]: { value } } }),\n\n spanNear: (clauses: ReadonlyArray<SpanQuery>, options?: SpanNearOptions) =>\n wrap({ span_near: { clauses: [...clauses], ...options } }),\n\n spanOr: (clauses: ReadonlyArray<SpanQuery>) => wrap({ span_or: { clauses: [...clauses] } }),\n\n spanNot: (include: SpanQuery, exclude: SpanQuery, options?: SpanNotOptions) =>\n wrap({ span_not: { include, exclude, ...options } }),\n\n spanFirst: (match: SpanQuery, end: number) => wrap({ span_first: { match, end } }),\n\n spanContaining: (big: SpanQuery, little: SpanQuery) => wrap({ span_containing: { big, little } }),\n\n spanWithin: (big: SpanQuery, little: SpanQuery) => wrap({ span_within: { big, little } }),\n\n spanMultiTerm: (query: Record<string, unknown>) => wrap({ span_multi: { match: query } }),\n\n spanFieldMasking: (field: string, query: SpanQuery) =>\n wrap({ span_field_masking: { field: qualifyField(field), query } })\n});\n\nconst createClauseBuilder = <M extends Record<string, FieldTypeString>>(prefix?: string): ClauseBuilder<M> => {\n const qualifyField = prefix ? (f: string) => `${prefix}.${f}` : (f: string) => f;\n return {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...createClauseMethods((dsl: any) => dsl, qualifyField),\n\n knn: (field: string, queryVector: number[], options: KnnOptions) => {\n const { k, num_candidates, ...restOptions } = options;\n\n return {\n knn: {\n field: qualifyField(field),\n query_vector: queryVector,\n k,\n num_candidates,\n ...restOptions\n }\n };\n },\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n nested: (path: string, fn: (q: any) => any, options?: NestedOptions) => {\n const nestedPath = prefix ? `${prefix}.${path}` : path;\n const nestedQuery = fn(createClauseBuilder(nestedPath));\n return nestedQuery === undefined ? undefined : { nested: { path: nestedPath, query: nestedQuery, ...options } };\n },\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n functionScore: (queryFn: (q: any) => any, options?: FunctionScoreOptions) => {\n const innerQuery = queryFn(createClauseBuilder(prefix)) ?? { match_all: {} };\n return { function_score: { query: innerQuery, ...options } };\n },\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n hasChild: (type: string, queryFn: (q: any) => any, options?: HasChildOptions) => {\n const childQuery = queryFn(createClauseBuilder<M>()) ?? { match_all: {} };\n return { has_child: { type, query: childQuery, ...options } };\n },\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n hasParent: (type: string, queryFn: (q: any) => any, options?: HasParentOptions) => {\n const parentQuery = queryFn(createClauseBuilder<M>()) ?? { match_all: {} };\n return { has_parent: { parent_type: type, query: parentQuery, ...options } };\n },\n\n parentId: (type: string, id: string, options?: ParentIdOptions) => ({\n parent_id: { type, id, ...options }\n }),\n\n when: (condition, thenFn) => (resolveCondition(condition) ? thenFn(createClauseBuilder(prefix)) : undefined)\n };\n};\n\nexport const createQueryBuilder = <M extends Record<string, FieldTypeString>>(\n state: QueryState<M> = {}\n): QueryBuilder<M> => {\n // Internal bool accumulator — during construction we always treat bool.must/filter/etc.\n // as arrays (the Elastic `QueryDslQueryContainer | QueryDslQueryContainer[]` union\n // exists for callers who pass a single clause; the builder never does).\n type BoolAcc = {\n bool?: {\n must?: unknown[];\n must_not?: unknown[];\n should?: unknown[];\n filter?: unknown[];\n minimum_should_match?: number;\n };\n };\n const q = (state.query ?? {}) as BoolAcc;\n\n return {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...createClauseMethods((dsl: any) => createQueryBuilder<M>({ ...state, query: dsl })),\n\n // eslint-disable-next-line functional/functional-parameters\n bool: () => createQueryBuilder<M>({ ...state, query: { bool: {} } as QueryDslQueryContainer }),\n\n must: (builderFn) => {\n const clause = builderFn(createClauseBuilder<M>());\n const existing = q.bool?.must ?? [];\n return clause === undefined\n ? createQueryBuilder<M>(state)\n : createQueryBuilder<M>({\n ...state,\n query: { bool: { ...q.bool, must: [...existing, clause] } } as QueryDslQueryContainer\n });\n },\n\n mustNot: (builderFn) => {\n const clause = builderFn(createClauseBuilder<M>());\n const existing = q.bool?.must_not ?? [];\n return clause === undefined\n ? createQueryBuilder<M>(state)\n : createQueryBuilder<M>({\n ...state,\n query: { bool: { ...q.bool, must_not: [...existing, clause] } } as QueryDslQueryContainer\n });\n },\n\n should: (builderFn) => {\n const clause = builderFn(createClauseBuilder<M>());\n const existing = q.bool?.should ?? [];\n return clause === undefined\n ? createQueryBuilder<M>(state)\n : createQueryBuilder<M>({\n ...state,\n query: { bool: { ...q.bool, should: [...existing, clause] } } as QueryDslQueryContainer\n });\n },\n\n filter: (builderFn) => {\n const clause = builderFn(createClauseBuilder<M>());\n const existing = q.bool?.filter ?? [];\n return clause === undefined\n ? createQueryBuilder<M>(state)\n : createQueryBuilder<M>({\n ...state,\n query: { bool: { ...q.bool, filter: [...existing, clause] } } as QueryDslQueryContainer\n });\n },\n\n minimumShouldMatch: (value) =>\n createQueryBuilder<M>({\n ...state,\n query: { bool: { ...q.bool, minimum_should_match: value } } as QueryDslQueryContainer\n }),\n\n knn: (field, queryVector, options) => {\n const { k, num_candidates, ...restOptions } = options;\n return createQueryBuilder<M>({\n ...state,\n knn: {\n field,\n query_vector: queryVector,\n k,\n num_candidates,\n ...restOptions\n }\n });\n },\n\n nested: (path, fn, options) => {\n const nestedQuery = fn(createClauseBuilder<SubFieldsOf<M, typeof path>>(path));\n return nestedQuery === undefined\n ? createQueryBuilder<M>(state)\n : createQueryBuilder<M>({\n ...state,\n query: { nested: { path, query: nestedQuery, ...options } }\n });\n },\n\n scriptScore: (queryFn, script, options) => {\n const innerQuery = queryFn(createClauseBuilder<M>()) ?? { match_all: {} };\n const { source, lang = 'painless', params } = script;\n return createQueryBuilder<M>({\n ...state,\n query: {\n script_score: {\n query: innerQuery,\n script: { source, lang, ...(params !== undefined && { params }) },\n ...(options?.min_score !== undefined && { min_score: options.min_score }),\n ...(options?.boost !== undefined && { boost: options.boost })\n }\n }\n });\n },\n\n percolate: (options) => createQueryBuilder<M>({ ...state, query: { percolate: { ...options } } }),\n\n functionScore: (queryFn, options) => {\n const innerQuery = queryFn(createClauseBuilder<M>()) ?? { match_all: {} };\n return createQueryBuilder<M>({\n ...state,\n query: { function_score: { query: innerQuery, ...options } }\n });\n },\n\n hasChild: (type, queryFn, options) => {\n const childQuery = queryFn(createClauseBuilder<M>()) ?? { match_all: {} };\n return createQueryBuilder<M>({\n ...state,\n query: { has_child: { type, query: childQuery, ...options } }\n });\n },\n\n hasParent: (type, queryFn, options) => {\n const parentQuery = queryFn(createClauseBuilder<M>()) ?? { match_all: {} };\n return createQueryBuilder<M>({\n ...state,\n query: { has_parent: { parent_type: type, query: parentQuery, ...options } }\n });\n },\n\n parentId: (type, id, options) =>\n createQueryBuilder<M>({ ...state, query: { parent_id: { type, id, ...options } } }),\n\n when: (condition, thenFn) =>\n resolveCondition(condition) ? thenFn(createQueryBuilder<M>(state)) : createQueryBuilder<M>(state),\n\n sort: (field, direction = 'asc') => {\n const existing = state.sort || [];\n return createQueryBuilder<M>({\n ...state,\n sort: [...existing, { [field]: direction }]\n });\n },\n\n from: (from) => createQueryBuilder<M>({ ...state, from }),\n\n size: (size) => createQueryBuilder<M>({ ...state, size }),\n\n _source: (_source) => createQueryBuilder<M>({ ...state, _source }),\n\n sourceIncludes: (paths) => createQueryBuilder<M>({ ...state, _source_includes: paths }),\n\n sourceExcludes: (paths) => createQueryBuilder<M>({ ...state, _source_excludes: paths }),\n\n runtimeMappings: (runtime_mappings) => createQueryBuilder<M>({ ...state, runtime_mappings }),\n\n docValueFields: (docvalue_fields) => createQueryBuilder<M>({ ...state, docvalue_fields }),\n\n fields: (fields) => createQueryBuilder<M>({ ...state, fields }),\n\n postFilter: (fn) => {\n const clause = fn(createClauseBuilder<M>());\n return clause === undefined\n ? createQueryBuilder<M>(state)\n : createQueryBuilder<M>({ ...state, post_filter: clause });\n },\n\n scriptFields: (script_fields) => createQueryBuilder<M>({ ...state, script_fields }),\n\n timeout: (timeout) => createQueryBuilder<M>({ ...state, timeout }),\n\n trackScores: (track_scores) => createQueryBuilder<M>({ ...state, track_scores }),\n\n explain: (explain) => createQueryBuilder<M>({ ...state, explain }),\n\n minScore: (min_score) => createQueryBuilder<M>({ ...state, min_score }),\n\n version: (version) => createQueryBuilder<M>({ ...state, version }),\n\n seqNoPrimaryTerm: (seq_no_primary_term) => createQueryBuilder<M>({ ...state, seq_no_primary_term }),\n\n trackTotalHits: (track_total_hits = true) => createQueryBuilder<M>({ ...state, track_total_hits }),\n\n highlight: (fields, options) => {\n const { pre_tags, post_tags, ...fieldOptions } = options || {};\n const fieldValue = Object.keys(fieldOptions).length > 0 ? fieldOptions : {};\n const highlightFields: Record<string, HighlightOptions> = Object.fromEntries(\n fields.map((field) => [field, fieldValue])\n );\n return createQueryBuilder<M>({\n ...state,\n highlight: {\n fields: highlightFields,\n ...(pre_tags && { pre_tags }),\n ...(post_tags && { post_tags })\n }\n });\n },\n\n constantScore: (fn, options) => {\n const clause = fn(createClauseBuilder<M>());\n return createQueryBuilder<M>({\n ...state,\n query: {\n constant_score: {\n filter: clause,\n ...options\n }\n }\n });\n },\n\n searchAfter: (values) => createQueryBuilder<M>({ ...state, search_after: values }),\n\n preference: (value) => createQueryBuilder<M>({ ...state, preference: value }),\n\n collapse: (field, options) =>\n createQueryBuilder<M>({\n ...state,\n collapse: {\n field,\n ...options\n } as typeof state.collapse\n }),\n\n rescore: (queryFn, windowSize, options) => {\n const rescoreQuery = queryFn(createClauseBuilder<M>());\n return createQueryBuilder<M>({\n ...state,\n rescore: {\n window_size: windowSize,\n query: {\n rescore_query: rescoreQuery,\n ...options\n }\n }\n });\n },\n\n storedFields: (fields) => createQueryBuilder<M>({ ...state, stored_fields: fields }),\n\n terminateAfter: (count) => createQueryBuilder<M>({ ...state, terminate_after: count }),\n\n pit: (id, keepAlive) => createQueryBuilder<M>({ ...state, pit: { id, keep_alive: keepAlive } }),\n\n indicesBoost: (boosts) => createQueryBuilder<M>({ ...state, indices_boost: boosts }),\n\n aggs: (fn) => {\n const aggBuilder = createAggregationBuilder<M>();\n const builtAggs = fn(aggBuilder).build();\n return createQueryBuilder<M>({ ...state, aggs: builtAggs });\n },\n\n suggest: (fn) => {\n const suggesterBuilder = createSuggesterBuilder<M>();\n const builtSuggestions = fn(suggesterBuilder).build();\n return createQueryBuilder<M>({\n ...state,\n suggest: builtSuggestions.suggest\n });\n },\n\n // eslint-disable-next-line functional/functional-parameters\n build: () => {\n const { _includeQuery, ...rest } = state;\n // eslint-disable-next-line functional/no-conditional-statements\n if (_includeQuery === false) {\n const { query: _q, ...noQuery } = rest;\n return noQuery as QueryState<M>;\n }\n return rest as QueryState<M>;\n }\n };\n};\n","/**\n * Mappings builder — creates a MappingsSchema artifact from field helper functions.\n * The schema carries field-type info at compile time and ES-compatible properties at runtime.\n *\n * Defaults to `dynamic: 'strict'` to prevent unmapped fields from being silently\n * indexed. Override with `mappings(fields, { dynamic: true })` if needed.\n *\n * @example\n * import { mappings, text, keyword, float, denseVector } from 'elasticlink';\n *\n * const productMappings = mappings({\n * name: text({ analyzer: 'standard' }),\n * category: keyword(),\n * price: float(),\n * });\n * // dynamic: 'strict' by default — unknown fields cause an indexing error\n *\n * @example\n * // Exclude dense_vector fields from _source to reduce response size\n * const searchMappings = mappings({\n * title: text(),\n * embedding: denseVector({ dims: 768 }),\n * }, {\n * _source: { excludes: ['embedding'] },\n * });\n */\n\nimport type { FieldMapping } from './index-management.types.js';\nimport type { MappingOptions, MappingsSchema } from './mapping.types.js';\nimport type { FieldMappingWithLiteralType } from './field.types.js';\n\ntype UnionToIntersection<U> = (U extends unknown ? (x: U) => never : never) extends (x: infer I) => never ? I : never;\n\ntype FlattenSubFields<\n Prefix extends string,\n F extends Record<string, FieldMappingWithLiteralType>\n> = UnionToIntersection<\n {\n [K in keyof F & string]: { [Key in `${Prefix}.${K}`]: F[K]['type'] } & (F[K] extends {\n _subFields: infer Sub extends Record<string, FieldMappingWithLiteralType>;\n }\n ? FlattenSubFields<`${Prefix}.${K}`, Sub>\n : Record<never, never>);\n }[keyof F & string]\n>;\n\ntype FlattenMultiFields<\n Prefix extends string,\n MF extends Record<string, FieldMappingWithLiteralType>\n> = UnionToIntersection<\n {\n [K in keyof MF & string]: { [Key in `${Prefix}.${K}`]: MF[K]['type'] };\n }[keyof MF & string]\n>;\n\ntype ExtractFieldTypes<F extends Record<string, FieldMappingWithLiteralType>> = {\n [K in keyof F]: F[K]['type'];\n} & UnionToIntersection<\n {\n [K in keyof F & string]: (F[K] extends {\n _subFields: infer Sub extends Record<string, FieldMappingWithLiteralType>;\n }\n ? FlattenSubFields<K, Sub>\n : Record<never, never>) &\n (F[K] extends {\n _multiFields: infer MF extends Record<string, FieldMappingWithLiteralType>;\n }\n ? FlattenMultiFields<K, MF>\n : Record<never, never>);\n }[keyof F & string]\n>;\n\nexport const mappings = <F extends Record<string, FieldMappingWithLiteralType>>(\n fields: F,\n options?: MappingOptions\n): MappingsSchema<ExtractFieldTypes<F>, F> => {\n const properties: Record<string, FieldMapping> = { ...fields };\n\n const mappingOptions: MappingOptions = {\n dynamic: 'strict',\n ...options\n };\n\n return {\n _fieldTypes: undefined as unknown as ExtractFieldTypes<F>,\n _fields: undefined as unknown as F,\n properties,\n _mappingOptions: mappingOptions\n };\n};\n","/**\n * Field type helper functions for ergonomic index mapping definitions.\n * Each helper returns a narrowly-typed mapping with a literal `type` field,\n * enabling compile-time field-type inference in the query builder.\n *\n * @example\n * import { text, keyword, denseVector, mappings } from 'elasticlink';\n *\n * const productMappings = mappings({\n * name: text({ analyzer: 'standard' }),\n * price: float(),\n * category: keyword(),\n * embedding: denseVector({ dims: 384 }),\n * });\n */\n\nimport type {\n TextFieldOptions,\n KeywordFieldOptions,\n NumericFieldOptions,\n UnsignedLongFieldOptions,\n ScaledFloatFieldOptions,\n DateFieldOptions,\n DateNanosFieldOptions,\n IpRangeFieldOptions,\n NestedFieldOptions,\n BooleanFieldOptions,\n DenseVectorFieldOptions,\n RankFeatureFieldOptions,\n RankFeaturesFieldOptions,\n SemanticTextFieldOptions,\n ObjectFieldOptions,\n CompletionFieldOptions,\n GeoPointFieldOptions,\n GeoShapeFieldOptions,\n AliasFieldOptions,\n IpFieldOptions,\n RangeFieldOptions,\n MatchOnlyTextFieldOptions,\n SearchAsYouTypeFieldOptions,\n ConstantKeywordFieldOptions,\n WildcardFieldOptions,\n FlattenedFieldOptions,\n TokenCountFieldOptions,\n JoinFieldOptions,\n FieldMappingWithLiteralType,\n TextFieldMapping,\n KeywordFieldMapping,\n LongFieldMapping,\n IntegerFieldMapping,\n ShortFieldMapping,\n ByteFieldMapping,\n DoubleFieldMapping,\n FloatFieldMapping,\n HalfFloatFieldMapping,\n ScaledFloatFieldMapping,\n DateFieldMapping,\n DateNanosFieldMapping,\n IpRangeFieldMapping,\n BooleanFieldMapping,\n BinaryFieldMapping,\n IpFieldMapping,\n DenseVectorFieldMapping,\n SparseVectorFieldMapping,\n RankFeatureFieldMapping,\n RankFeaturesFieldMapping,\n SemanticTextFieldMapping,\n UnsignedLongFieldMapping,\n GeoPointFieldMapping,\n GeoShapeFieldMapping,\n CompletionFieldMapping,\n TypedNestedFieldMapping,\n TypedObjectFieldMapping,\n AliasFieldMapping,\n PercolatorFieldMapping,\n IntegerRangeFieldMapping,\n FloatRangeFieldMapping,\n LongRangeFieldMapping,\n DoubleRangeFieldMapping,\n DateRangeFieldMapping,\n MatchOnlyTextFieldMapping,\n SearchAsYouTypeFieldMapping,\n ConstantKeywordFieldMapping,\n WildcardFieldMapping,\n FlattenedFieldMapping,\n TokenCountFieldMapping,\n Murmur3FieldMapping,\n JoinFieldMapping\n} from './field.types.js';\n\n// Text & keyword\nexport const text = <MF extends Record<string, FieldMappingWithLiteralType>>(\n options?: TextFieldOptions<MF>\n): TextFieldMapping & Readonly<{ _multiFields: MF }> =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ({ type: 'text', ...options }) as any;\nexport const keyword = <MF extends Record<string, FieldMappingWithLiteralType>>(\n options?: KeywordFieldOptions<MF>\n): KeywordFieldMapping & Readonly<{ _multiFields: MF }> =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ({ type: 'keyword', ...options }) as any;\n\n// Numeric\nexport const long = <MF extends Record<string, FieldMappingWithLiteralType>>(\n options?: NumericFieldOptions<MF>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): LongFieldMapping & Readonly<{ _multiFields: MF }> => ({ type: 'long', ...options }) as any;\nexport const integer = <MF extends Record<string, FieldMappingWithLiteralType>>(\n options?: NumericFieldOptions<MF>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): IntegerFieldMapping & Readonly<{ _multiFields: MF }> => ({ type: 'integer', ...options }) as any;\nexport const short = <MF extends Record<string, FieldMappingWithLiteralType>>(\n options?: NumericFieldOptions<MF>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): ShortFieldMapping & Readonly<{ _multiFields: MF }> => ({ type: 'short', ...options }) as any;\nexport const byte = <MF extends Record<string, FieldMappingWithLiteralType>>(\n options?: NumericFieldOptions<MF>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): ByteFieldMapping & Readonly<{ _multiFields: MF }> => ({ type: 'byte', ...options }) as any;\nexport const double = <MF extends Record<string, FieldMappingWithLiteralType>>(\n options?: NumericFieldOptions<MF>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): DoubleFieldMapping & Readonly<{ _multiFields: MF }> => ({ type: 'double', ...options }) as any;\nexport const float = <MF extends Record<string, FieldMappingWithLiteralType>>(\n options?: NumericFieldOptions<MF>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): FloatFieldMapping & Readonly<{ _multiFields: MF }> => ({ type: 'float', ...options }) as any;\nexport const halfFloat = <MF extends Record<string, FieldMappingWithLiteralType>>(\n options?: NumericFieldOptions<MF>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): HalfFloatFieldMapping & Readonly<{ _multiFields: MF }> => ({ type: 'half_float', ...options }) as any;\nexport const scaledFloat = <MF extends Record<string, FieldMappingWithLiteralType>>(\n options?: ScaledFloatFieldOptions<MF>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): ScaledFloatFieldMapping & Readonly<{ _multiFields: MF }> => ({ type: 'scaled_float', ...options }) as any;\n\n// Date & boolean\nexport const date = <MF extends Record<string, FieldMappingWithLiteralType>>(\n options?: DateFieldOptions<MF>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): DateFieldMapping & Readonly<{ _multiFields: MF }> => ({ type: 'date', ...options }) as any;\n\n/**\n * Date field stored with nanosecond precision. Same API as `date()` but supports sub-millisecond timestamps.\n * @see https://www.elastic.co/guide/en/elasticsearch/reference/current/date_nanos.html\n */\nexport const dateNanos = <MF extends Record<string, FieldMappingWithLiteralType>>(\n options?: DateNanosFieldOptions<MF>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): DateNanosFieldMapping & Readonly<{ _multiFields: MF }> => ({ type: 'date_nanos', ...options }) as any;\nexport const boolean = (options?: BooleanFieldOptions): BooleanFieldMapping => ({\n type: 'boolean',\n ...options\n});\n\n// Binary\n// eslint-disable-next-line functional/functional-parameters\nexport const binary = (): BinaryFieldMapping => ({ type: 'binary' });\n\n// IP\nexport const ip = (options?: IpFieldOptions): IpFieldMapping => ({\n type: 'ip',\n ...options\n});\n\n// Vector\nexport const denseVector = (options?: DenseVectorFieldOptions): DenseVectorFieldMapping => ({\n type: 'dense_vector',\n ...options\n});\n\n/**\n * Quantized dense vector field — wraps `denseVector()` with `int8_hnsw` index type.\n *\n * Quantizes float32 vectors to int8 at index time, saving ~75% memory.\n * Recommended for vectors with dims >= 384. Original float vectors are retained\n * in the index, enabling a two-phase search pattern:\n *\n * 1. Fast approximate search using quantized int8 vectors\n * 2. Precise rescore of top-k results using retained float vectors\n *\n * @example\n * // Index mapping\n * const schema = mappings({\n * title: text(),\n * embedding: quantizedDenseVector({ dims: 768, similarity: 'cosine' }),\n * }, {\n * _source: { excludes: ['embedding'] },\n * });\n *\n * // Two-phase search: fast kNN + precise rescore\n * const result = queryBuilder(schema)\n * .knn('embedding', queryVector, { k: 100, num_candidates: 200 })\n * .rescore(\n * (q) => q.scriptScore(\n * (inner) => inner.matchAll(),\n * { source: \"cosineSimilarity(params.v, 'embedding') + 1.0\", params: { v: queryVector } }\n * ),\n * 100\n * )\n * .build();\n */\nexport const quantizedDenseVector = (options?: DenseVectorFieldOptions): DenseVectorFieldMapping => ({\n type: 'dense_vector',\n ...options,\n index_options: { type: 'int8_hnsw', ...options?.index_options }\n});\n\n/**\n * Sparse vector field — stores token-weight pairs for sparse retrieval (e.g. ELSER/BM25-style models).\n * Complement to `denseVector()`. Query with the `sparse_vector` query.\n * @see https://www.elastic.co/guide/en/elasticsearch/reference/current/sparse-vector.html\n */\n// eslint-disable-next-line functional/functional-parameters\nexport const sparseVector = (): SparseVectorFieldMapping => ({ type: 'sparse_vector' });\n\n/**\n * Rank feature field — a single numeric feature used by the `rank_feature` query to boost relevance.\n * Use when each document has one named signal (e.g. `pagerank`, `popularity_score`).\n * @see https://www.elastic.co/guide/en/elasticsearch/reference/current/rank-feature.html\n */\nexport const rankFeature = (options?: RankFeatureFieldOptions): RankFeatureFieldMapping => ({\n type: 'rank_feature',\n ...options\n});\n\n/**\n * Rank features field — a sparse map of numeric features used by the `rank_feature` query.\n * Use when each document has many named signals (e.g. topic scores).\n * @see https://www.elastic.co/guide/en/elasticsearch/reference/current/rank-features.html\n */\nexport const rankFeatures = (options?: RankFeaturesFieldOptions): RankFeaturesFieldMapping => ({\n type: 'rank_features',\n ...options\n});\n\n/**\n * Semantic text field (ES 9.x) — ML-powered text field for semantic and hybrid search.\n * Automatically generates and stores embeddings at index time using the configured inference endpoint.\n *\n * @example\n * const schema = mappings({\n * title: text(),\n * body: semanticText({ inference_id: 'my-elser-endpoint' }),\n * });\n * @see https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-text.html\n */\nexport const semanticText = (options?: SemanticTextFieldOptions): SemanticTextFieldMapping => ({\n type: 'semantic_text',\n ...options\n});\n\n/**\n * Unsigned long field (ES 9.0+) — stores unsigned 64-bit integer values (0 to 2^64-1).\n * Use when values exceed the `long` range.\n * @see https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html\n */\nexport const unsignedLong = <MF extends Record<string, FieldMappingWithLiteralType>>(\n options?: UnsignedLongFieldOptions<MF>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): UnsignedLongFieldMapping & Readonly<{ _multiFields: MF }> => ({ type: 'unsigned_long', ...options }) as any;\n\n// Geo\nexport const geoPoint = (options?: GeoPointFieldOptions): GeoPointFieldMapping => ({\n type: 'geo_point',\n ...options\n});\nexport const geoShape = (options?: GeoShapeFieldOptions): GeoShapeFieldMapping => ({\n type: 'geo_shape',\n ...options\n});\n\n// Completion\nexport const completion = (options?: CompletionFieldOptions): CompletionFieldMapping => ({\n type: 'completion',\n ...options\n});\n\n// Structured\n\n/**\n * Object field — for JSON-like structured documents where sub-fields are queried with dot-notation.\n *\n * The most common way to model structured data (e.g. `{ address: { city, zip } }`).\n * Sub-fields are indexed inline within the parent document — no special query wrapper needed.\n * Query sub-fields directly using dot-notation: `.term('address.city', 'NYC')`.\n *\n * Use `nested()` instead when you have **arrays of objects** and need cross-field queries\n * within each element to be accurate (e.g. tags with both a label and weight).\n *\n * @example\n * const m = mappings({\n * address: object({\n * street: text(),\n * city: keyword(),\n * zip: keyword(),\n * }),\n * });\n * queryBuilder(m).term('address.city', 'NYC').build();\n */\nexport function object<F extends Record<string, FieldMappingWithLiteralType>>(\n fields: F,\n options?: ObjectFieldOptions\n): TypedObjectFieldMapping<F> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { type: 'object', ...(options ?? {}), properties: fields } as any;\n}\n\n/**\n * Nested field — for **arrays of objects** where cross-field queries within each element must be accurate.\n *\n * Each nested object is stored as a separate hidden Elasticsearch document, preserving the\n * relationship between sub-fields within each element. Without `nested`, Elasticsearch flattens\n * array sub-fields and loses which values belong to the same element.\n *\n * Queries on nested fields **must** use the `.nested()` query builder method — direct dot-notation\n * queries will not find nested documents.\n *\n * Use `object()` instead for single structured objects (addresses, names, etc.) — it is simpler,\n * more efficient, and does not require a query wrapper.\n *\n * @example\n * const m = mappings({\n * tags: nested({\n * label: keyword(),\n * weight: float(),\n * }),\n * });\n * queryBuilder(m).nested('tags', q => q.term('label', 'sale')).build();\n */\nexport function nested<F extends Record<string, FieldMappingWithLiteralType>>(\n fields: F,\n options?: NestedFieldOptions\n): TypedNestedFieldMapping<F> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { type: 'nested', ...(options ?? {}), properties: fields } as any;\n}\n\n// Alias\nexport const alias = (options: AliasFieldOptions): AliasFieldMapping => ({\n type: 'alias',\n ...options\n});\n\n// Percolator\n// eslint-disable-next-line functional/functional-parameters\nexport const percolator = (): PercolatorFieldMapping => ({\n type: 'percolator'\n});\n\n// Range types\nexport const integerRange = (options?: RangeFieldOptions): IntegerRangeFieldMapping => ({\n type: 'integer_range',\n ...options\n});\nexport const floatRange = (options?: RangeFieldOptions): FloatRangeFieldMapping => ({\n type: 'float_range',\n ...options\n});\nexport const longRange = (options?: RangeFieldOptions): LongRangeFieldMapping => ({\n type: 'long_range',\n ...options\n});\nexport const doubleRange = (options?: RangeFieldOptions): DoubleRangeFieldMapping => ({\n type: 'double_range',\n ...options\n});\nexport const dateRange = (options?: RangeFieldOptions): DateRangeFieldMapping => ({\n type: 'date_range',\n ...options\n});\n\n/**\n * IP range field — stores a range of IPv4/IPv6 addresses.\n * @see https://www.elastic.co/guide/en/elasticsearch/reference/current/range.html\n */\nexport const ipRange = (options?: IpRangeFieldOptions): IpRangeFieldMapping => ({\n type: 'ip_range',\n ...options\n});\n\n/**\n * No-score text field — faster and uses less disk than `text()`.\n * Use when you only need filter/match but not relevance scoring (e.g., logs, simple field matches).\n */\nexport const matchOnlyText = <MF extends Record<string, FieldMappingWithLiteralType>>(\n options?: MatchOnlyTextFieldOptions<MF>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): MatchOnlyTextFieldMapping & Readonly<{ _multiFields: MF }> => ({ type: 'match_only_text', ...options }) as any;\n\n/**\n * Autocomplete / typeahead field. Creates sub-fields for edge n-gram matching\n * out of the box. Query with `multi_match` targeting the generated sub-fields.\n */\nexport const searchAsYouType = (options?: SearchAsYouTypeFieldOptions): SearchAsYouTypeFieldMapping => ({\n type: 'search_as_you_type',\n ...options\n});\n\n/**\n * Field where every document has the same value. Useful for multi-index queries\n * to identify the index type (e.g., `constantKeyword({ value: 'product' })`).\n */\nexport const constantKeyword = (options?: ConstantKeywordFieldOptions): ConstantKeywordFieldMapping => ({\n type: 'constant_keyword',\n ...options\n});\n\n/**\n * Optimized for grep-like wildcard/regexp queries on high-cardinality or large fields.\n * Use instead of `keyword()` when leading wildcards (`*foo`) are needed.\n */\nexport const wildcardField = (options?: WildcardFieldOptions): WildcardFieldMapping => ({\n type: 'wildcard',\n ...options\n});\n\n/**\n * Flattens complex/dynamic objects into a single field. Faster than `nested()`,\n * but only supports keyword-level queries on inner values.\n */\nexport const flattened = (options?: FlattenedFieldOptions): FlattenedFieldMapping => ({\n type: 'flattened',\n ...options\n});\n\n/**\n * Token count field — stores the number of tokens produced by an analyzer.\n * Useful for enforcing minimum/maximum field lengths via queries or aggregations.\n * @see https://www.elastic.co/guide/en/elasticsearch/reference/current/token-count.html\n */\nexport const tokenCount = (options?: TokenCountFieldOptions): TokenCountFieldMapping => ({\n type: 'token_count',\n ...options\n});\n\n/**\n * Murmur3 hash field — computes and stores a murmur3 hash of field values at index time.\n * Requires the `mapper-murmur3` plugin.\n * @see https://www.elastic.co/guide/en/elasticsearch/plugins/current/mapper-murmur3.html\n */\n// eslint-disable-next-line functional/functional-parameters\nexport const murmur3Hash = (): Murmur3FieldMapping => ({ type: 'murmur3' });\n\n/**\n * Join field — defines parent/child relationships within a single index.\n * `relations` is required: maps parent names to one or more child names.\n * @see https://www.elastic.co/guide/en/elasticsearch/reference/current/parent-join.html\n *\n * @example\n * const m = mappings({\n * title: text(),\n * relation: join({ relations: { question: 'answer' } }),\n * });\n */\nexport const join = (options: JoinFieldOptions): JoinFieldMapping => ({\n type: 'join',\n ...options\n});\n","/**\n * Multi-Search API builder\n * Enables batching multiple search requests in a single API call\n */\n\nimport type { FieldTypeString } from './index-management.types.js';\nimport type { MappingsSchema } from './mapping.types.js';\nimport { MSearchBuilder, MSearchRequest, MSearchRequestParams } from './multi-search.types.js';\n\n/**\n * Creates a multi-search builder\n * @returns MSearchBuilder instance\n */\nexport const createMSearchBuilder = <M extends Record<string, FieldTypeString>>(\n searches: MSearchRequest<M>[] = [],\n params: MSearchRequestParams = {}\n): MSearchBuilder<M> => ({\n add: (request) => {\n return createMSearchBuilder<M>([...searches, request], params);\n },\n\n addQuery: (body, header = {}) => {\n return createMSearchBuilder<M>([...searches, { header, body }], params);\n },\n\n addQueryBuilder: (qb, header = {}) => {\n return createMSearchBuilder<M>([...searches, { header, body: qb.build() }], params);\n },\n\n withParams: (next) => {\n return createMSearchBuilder<M>(searches, { ...params, ...next });\n },\n\n // eslint-disable-next-line functional/functional-parameters\n build: () => {\n return `${searches\n .map(({ header, body }) => {\n const headerLine = JSON.stringify(header || {});\n const bodyLine = JSON.stringify(body);\n return `${headerLine}\\n${bodyLine}`;\n })\n .join('\\n')}\\n`;\n },\n\n // eslint-disable-next-line functional/functional-parameters\n buildArray: () => {\n return searches.flatMap(({ header, body }) => [header || {}, body]);\n },\n\n // eslint-disable-next-line functional/functional-parameters\n buildParams: () => params\n});\n\n/**\n * Create a new multi-search builder\n * @example\n * const ms = msearch(productMappings)\n * .addQueryBuilder(queryBuilder(productMappings).match('name', 'shoe'), { index: 'products' })\n * .addQueryBuilder(queryBuilder(productMappings).match('name', 'shirt'), { index: 'products' })\n * .withParams({ max_concurrent_searches: 5, typed_keys: true })\n * .build();\n */\nexport const msearch = <M extends Record<string, FieldTypeString>>(_schema: MappingsSchema<M>) =>\n createMSearchBuilder<M>();\n","/**\n * Bulk API builder\n * Enables batching multiple index/create/update/delete operations\n */\n\nimport type { BulkOperationContainer, BulkUpdateAction } from '@elastic/elasticsearch/lib/api/types';\nimport type { FieldTypeString } from './index-management.types.js';\nimport type { MappingsSchema, Infer } from './mapping.types.js';\nimport { BulkBuilder } from './bulk.types.js';\n\n/**\n * Creates a bulk operations builder\n * @returns BulkBuilder instance\n */\nexport const createBulkBuilder = <T>(\n operations: Array<BulkOperationContainer | T | Partial<T> | BulkUpdateAction<T, Partial<T>>> = []\n): BulkBuilder<T> => ({\n index: (doc, meta = {}) => {\n return createBulkBuilder<T>([...operations, { index: meta }, doc]);\n },\n\n create: (doc, meta = {}) => {\n return createBulkBuilder<T>([...operations, { create: meta }, doc]);\n },\n\n update: (meta) => {\n const { doc, script, upsert, doc_as_upsert, detect_noop, scripted_upsert, _source, ...header } = meta;\n const updateDoc = {\n ...(doc && { doc }),\n ...(script && { script }),\n ...(upsert && { upsert }),\n ...(doc_as_upsert !== undefined && { doc_as_upsert }),\n ...(detect_noop !== undefined && { detect_noop }),\n ...(scripted_upsert !== undefined && { scripted_upsert }),\n ...(_source !== undefined && { _source })\n } as BulkUpdateAction<T, Partial<T>>;\n\n return createBulkBuilder<T>([...operations, { update: header }, updateDoc]);\n },\n\n delete: (meta) => {\n return createBulkBuilder<T>([...operations, { delete: meta }]);\n },\n\n // eslint-disable-next-line functional/functional-parameters\n build: () => {\n return `${operations.map((op) => JSON.stringify(op)).join('\\n')}\\n`;\n },\n\n // eslint-disable-next-line functional/functional-parameters\n buildArray: () => operations\n});\n\n/**\n * Create a new bulk operations builder.\n * `.build()` returns an NDJSON string (newline-delimited JSON) ready to POST to `/_bulk`.\n * `.buildArray()` returns the raw operation objects if you need to inspect or transform them.\n * @example\n * const ndjson = bulk(productMappings)\n * .index({ id: '1', name: 'Product 1' }, { _index: 'products', _id: '1' })\n * .create({ id: '2', name: 'Product 2' }, { _index: 'products', _id: '2' })\n * .update({ _index: 'products', _id: '3', doc: { name: 'Updated' } })\n * .delete({ _index: 'products', _id: '4' })\n * .build(); // POST to /_bulk with Content-Type: application/x-ndjson\n */\nexport const bulk = <M extends Record<string, FieldTypeString>>(_schema: MappingsSchema<M>) =>\n createBulkBuilder<Infer<MappingsSchema<M>>>();\n","/**\n * Index Management builder\n * Create and configure Elasticsearch indices\n */\n\nimport type {\n FieldMapping,\n FieldTypeString,\n IndexBuilder,\n CreateIndexOptions,\n AnalysisConfig,\n IndexSettings\n} from './index-management.types.js';\nimport type { MappingsSchema, MappingOptions } from './mapping.types.js';\n\nconst isMappingsSchema = (\n input: MappingsSchema<Record<string, FieldTypeString>> | Record<string, FieldMapping>\n): input is MappingsSchema<Record<string, FieldTypeString>> => '_fieldTypes' in input;\n\n/**\n * Creates an index builder.\n *\n * The optional generic `M` carries the field-type map from any mapping schema attached\n * via `.mappings(schema)`. `.mappings()` rebinds the generic to the incoming schema's\n * field-type map, so callers typically rely on inference rather than specifying `M` directly.\n *\n * @returns IndexBuilder instance\n */\nexport const createIndexBuilder = <M extends Record<string, FieldTypeString> = Record<string, FieldTypeString>>(\n state: CreateIndexOptions = {}\n): IndexBuilder<M> => ({\n mappings: <NewM extends Record<string, FieldTypeString>>(\n schemaOrFields: MappingsSchema<NewM> | Record<string, FieldMapping>,\n inlineOptions?: MappingOptions\n ): IndexBuilder<NewM> => {\n const rawProperties = isMappingsSchema(schemaOrFields) ? schemaOrFields.properties : schemaOrFields;\n const properties = Object.fromEntries(Object.entries(rawProperties).filter(([, v]) => v !== undefined));\n const schemaOptions = isMappingsSchema(schemaOrFields) ? schemaOrFields._mappingOptions : undefined;\n const mappingOptions: MappingOptions = {\n dynamic: 'strict',\n ...schemaOptions,\n ...inlineOptions\n };\n return createIndexBuilder<NewM>({\n ...state,\n mappings: {\n properties,\n ...(mappingOptions.dynamic !== undefined && { dynamic: mappingOptions.dynamic }),\n ...(mappingOptions._source !== undefined && { _source: mappingOptions._source }),\n ...(mappingOptions._meta && { _meta: mappingOptions._meta })\n } as typeof state.mappings\n });\n },\n\n settings: (settings) => createIndexBuilder<M>({ ...state, settings }),\n\n analysis: (config: AnalysisConfig) =>\n createIndexBuilder<M>({ ...state, settings: { ...state.settings, analysis: config } as IndexSettings }),\n\n alias: (name, options = {}) => {\n const aliases = state.aliases || {};\n return createIndexBuilder<M>({\n ...state,\n aliases: { ...aliases, [name]: options }\n });\n },\n\n // eslint-disable-next-line functional/functional-parameters\n build: () => state\n});\n\n/**\n * Create a new index builder for Elasticsearch index configuration.\n *\n * Typical lifecycle:\n * 1. **Create index:** `indexBuilder().mappings(schema).settings(productionSearchSettings()).build()`\n * 2. **Bulk ingest:** Apply `fastIngestSettings()` via ES `_settings` API → bulk index →\n * apply `productionSearchSettings()` → `POST /index/_refresh`\n * 3. **Normal operations:** Query, update individual docs via `_update` API\n * 4. **Migration with mapping changes:** Create new index with new mappings → `POST _reindex`\n * from old → atomically swap alias via `POST _aliases` → delete old index\n *\n * After bulk loading, remember to refresh the index with `POST /index/_refresh`\n * to make all documents searchable.\n *\n * @example\n * const indexConfig = indexBuilder()\n * .mappings(productMappings)\n * .settings(productionSearchSettings())\n * .alias('products')\n * .build();\n */\n// eslint-disable-next-line functional/functional-parameters\nexport const indexBuilder = (): IndexBuilder => createIndexBuilder();\n","/**\n * Index settings presets for common Elasticsearch scenarios.\n *\n * These are standalone functions that return `IndicesIndexSettings` objects.\n * Use them with `indexBuilder().settings()` for index creation, or pass directly\n * to the ES `_settings` API for runtime changes.\n *\n * Typical lifecycle:\n * 1. Create index: `indexBuilder().mappings(schema).settings(productionSearchSettings()).build()`\n * 2. Before bulk ingest: apply `fastIngestSettings()` via ES `_settings` API\n * 3. Perform bulk ingest\n * 4. After bulk ingest: apply `productionSearchSettings()` via ES `_settings` API\n * 5. Refresh: `POST /index/_refresh`\n */\n\nimport type {\n IndicesIndexSettings,\n IndicesIndexSegmentSort,\n IndicesSegmentSortMode,\n IndicesSegmentSortMissing\n} from '@elastic/elasticsearch/lib/api/types';\n\n/**\n * Balanced production settings for search workloads.\n *\n * Defaults:\n * - `number_of_replicas: 1` — one replica for redundancy\n * - `refresh_interval: '5s'` — near-real-time search without excessive refresh overhead\n *\n * @param overrides - Override or extend any setting. Applied after defaults.\n *\n * @example\n * const index = indexBuilder()\n * .mappings(schema)\n * .settings(productionSearchSettings())\n * .build();\n *\n * @example\n * // With best_compression for disk savings\n * productionSearchSettings({ codec: 'best_compression' })\n *\n * @example\n * // Restore production settings after bulk ingest\n * await client.indices.putSettings({\n * index: 'my-index',\n * body: productionSearchSettings(),\n * });\n * await client.indices.refresh({ index: 'my-index' });\n */\nexport const productionSearchSettings = (overrides?: Partial<IndicesIndexSettings>): IndicesIndexSettings => ({\n number_of_replicas: 1,\n refresh_interval: '5s',\n ...overrides\n});\n\n/**\n * Per-field sort configuration for `indexSortSettings()`.\n * Either a bare direction, or a full spec with `mode`/`missing`.\n */\nexport type IndexSortFieldSpec =\n | 'asc'\n | 'desc'\n | {\n order: 'asc' | 'desc';\n mode?: IndicesSegmentSortMode;\n missing?: IndicesSegmentSortMissing;\n };\n\n/**\n * Generate index sort settings from a field→direction (or full spec) map.\n *\n * Index-time sorting improves compression (similar values stored together) and\n * enables early termination when query sort matches index sort. Combine with\n * `trackTotalHits(false)` for fastest sorted queries.\n *\n * The returned object lives at the top level of `IndicesIndexSettings` — spread it\n * directly into a settings object (do NOT wrap it under an `index` key, the\n * `@elastic/elasticsearch` client normalises that form).\n *\n * Pass a bare `'asc' | 'desc'` for simple cases; pass `{ order, mode?, missing? }`\n * when you need `mode` (`min`/`max`/`median`/`avg`) or `missing` (`_first`/`_last`).\n *\n * @param fields - Map of field names to sort direction or full spec.\n * @returns A `{ sort: IndicesIndexSegmentSort }` fragment to spread into your settings.\n *\n * @example\n * const index = indexBuilder()\n * .mappings(schema)\n * .settings({\n * ...productionSearchSettings(),\n * ...indexSortSettings({ timestamp: 'desc', status: 'asc' }),\n * })\n * .build();\n *\n * @example\n * indexSortSettings({\n * price: { order: 'asc', mode: 'min', missing: '_last' },\n * created_at: 'desc'\n * })\n */\nexport const indexSortSettings = (fields: Record<string, IndexSortFieldSpec>): { sort: IndicesIndexSegmentSort } => {\n const entries = Object.entries(fields);\n const normalize = (spec: IndexSortFieldSpec) => (typeof spec === 'string' ? { order: spec } : spec);\n const hasAnyMode = entries.some(([, spec]) => typeof spec !== 'string' && spec.mode !== undefined);\n const hasAnyMissing = entries.some(([, spec]) => typeof spec !== 'string' && spec.missing !== undefined);\n return {\n sort: {\n field: entries.map(([name]) => name),\n order: entries.map(([, spec]) => normalize(spec).order),\n ...(hasAnyMode && {\n mode: entries.map(([, spec]) => normalize(spec).mode ?? ('min' as IndicesSegmentSortMode))\n }),\n ...(hasAnyMissing && {\n missing: entries.map(([, spec]) => normalize(spec).missing ?? ('_last' as IndicesSegmentSortMissing))\n })\n }\n };\n};\n\n/**\n * Settings optimized for maximum indexing speed during bulk operations.\n *\n * Apply via the ES `_settings` API before starting bulk ingest, then revert\n * with `productionSearchSettings()` afterward. Do not use these as permanent\n * index settings — they trade durability and search availability for speed.\n *\n * Defaults:\n * - `refresh_interval: '-1'` — disables refresh (can improve reindex time by 70%+)\n * - `number_of_replicas: 0` — no replication overhead during ingest\n * - `translog.durability: 'async'` — async translog for faster writes\n * - `translog.sync_interval: '30s'` — less frequent translog sync\n *\n * @param overrides - Override or extend any setting. Applied after defaults.\n * `translog` overrides are deep-merged so individual translog keys can be\n * changed without clobbering the other defaults.\n *\n * @example\n * // Apply before bulk ingest via ES client\n * await client.indices.putSettings({\n * index: 'my-index',\n * body: fastIngestSettings(),\n * });\n *\n * @example\n * // With custom overrides\n * fastIngestSettings({ number_of_shards: 3 })\n */\nexport const fastIngestSettings = (overrides?: Partial<IndicesIndexSettings>): IndicesIndexSettings => {\n const { translog, ...rest } = overrides ?? {};\n return {\n number_of_replicas: 0,\n refresh_interval: '-1',\n translog: {\n durability: 'async',\n sync_interval: '30s',\n ...translog\n },\n ...rest\n };\n};\n","import type { FieldTypeString } from './index-management.types.js';\nimport type { FieldMappingWithLiteralType } from './field.types.js';\nimport type { Infer, MappingsSchema } from './mapping.types.js';\nimport { createQueryBuilder } from './query.builder.js';\n\n// Search API\nexport const queryBuilder = <M extends Record<string, FieldTypeString>>(\n _schema: MappingsSchema<M>,\n includeQuery: boolean = true\n) => createQueryBuilder<M>({ _includeQuery: includeQuery });\nexport type {\n QueryBuilder,\n ClauseBuilder,\n FunctionScoreOptions,\n HasChildOptions,\n HasParentOptions,\n ParentIdOptions,\n IntervalsOptions,\n SpanNearOptions,\n SpanNotOptions,\n SpanQuery\n} from './query.types.js';\n\n/**\n * Type inference helper for vanilla JavaScript.\n *\n * **Type-only — do not use the returned value at runtime.** This function always returns\n * `undefined`; its declared return type is a lie used to carry `Infer<typeof schema>` into\n * JSDoc `@type` annotations. Accessing properties on the return value (e.g. `inferType(s).name`)\n * will throw `TypeError`.\n *\n * @example\n * const schema = mappings({ name: text() });\n * const _Product = inferType(schema); // undefined at runtime; type-only\n *\n * /** @type {typeof _Product} *\\/\n * const doc = { name: 'Laptop' };\n *\n * In TypeScript, prefer `type Product = Infer<typeof schema>` directly.\n */\nexport const inferType = <\n M extends Record<string, FieldTypeString>,\n F extends Record<string, FieldMappingWithLiteralType>\n>(\n _schema: MappingsSchema<M, F>\n): Infer<MappingsSchema<M, F>> => undefined as never;\n\n// Aggregations API\nexport { aggregations } from './aggregation.builder.js';\nexport type { RootAggregationBuilder, NestedAggregationBuilder, NestedEntryBuilder } from './aggregation.types.js';\n\n// Mappings API\nexport { mappings } from './mapping.builder.js';\nexport {\n text,\n keyword,\n long,\n integer,\n short,\n byte,\n double,\n float,\n halfFloat,\n scaledFloat,\n date,\n dateNanos,\n boolean,\n binary,\n ip,\n denseVector,\n geoPoint,\n geoShape,\n completion,\n nested,\n object,\n alias,\n percolator,\n integerRange,\n floatRange,\n longRange,\n doubleRange,\n dateRange,\n ipRange,\n matchOnlyText,\n searchAsYouType,\n constantKeyword,\n wildcardField,\n flattened,\n quantizedDenseVector,\n sparseVector,\n rankFeature,\n rankFeatures,\n semanticText,\n unsignedLong,\n tokenCount,\n murmur3Hash,\n join\n} from './field.helpers.js';\nexport type {\n MappingsSchema,\n Infer,\n FieldsOfType,\n TextFields,\n KeywordFields,\n NumericFields,\n DateFields,\n BooleanFields,\n GeoPointFields,\n GeoShapeFields,\n VectorFields,\n DenseVectorFields,\n SparseVectorFields,\n RankFeatureFields,\n CompletionFields,\n IpFields\n} from './mapping.types.js';\nexport type {\n FieldMappingWithLiteralType,\n TypedNestedFieldMapping,\n TypedObjectFieldMapping,\n UnsignedLongFieldOptions,\n DateNanosFieldOptions,\n IpRangeFieldOptions,\n NestedFieldOptions,\n ObjectFieldOptions,\n TokenCountFieldOptions,\n JoinFieldOptions\n} from './field.types.js';\n\n// Multi-search API\nexport { msearch } from './multi-search.builder.js';\nexport type { MSearchBuilder, MSearchHeader, MSearchRequestParams } from './multi-search.types.js';\n\n// Bulk API\nexport { bulk } from './bulk.builder.js';\nexport type { BulkBuilder, BulkOperationContainer } from './bulk.types.js';\n\n// Index Management API\nexport { indexBuilder } from './index-management.builder.js';\nexport type {\n IndexBuilder,\n AnalysisConfig,\n AnalysisAnalyzerConfig,\n AnalysisTokenizerConfig,\n AnalysisTokenFilterConfig,\n AnalysisCharFilterConfig,\n AnalysisNormalizerConfig\n} from './index-management.types.js';\n\n// Suggester API\nexport { suggest } from './suggester.builder.js';\nexport type {\n SuggesterBuilder,\n TermSuggesterOptions,\n PhraseSuggesterOptions,\n CompletionSuggesterOptions,\n PhraseSuggestDirectGenerator,\n PhraseSuggestCollate,\n PhraseSuggestSmoothingModel,\n CompletionSuggestContext\n} from './suggester.types.js';\n\n// Settings Presets\nexport { productionSearchSettings, indexSortSettings, fastIngestSettings } from './settings.presets.js';\nexport type { IndexSortFieldSpec } from './settings.presets.js';\n"],"mappings":"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"}
|