@yext/answers-search-ui
Version:
Javascript Search Programming Interface
1,375 lines (1,266 loc) • 4.82 MB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ANSWERS = factory());
})(this, (function () { 'use strict';
function _arrayLikeToArray(r, a) {
(null == a || a > r.length) && (a = r.length);
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
return n;
}
function _arrayWithHoles(r) {
if (Array.isArray(r)) return r;
}
function _arrayWithoutHoles(r) {
if (Array.isArray(r)) return _arrayLikeToArray(r);
}
function _assertThisInitialized(e) {
if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return e;
}
function _callSuper(t, o, e) {
return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e));
}
function _classCallCheck(a, n) {
if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
}
function _construct(t, e, r) {
if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);
var o = [null];
o.push.apply(o, e);
var p = new (t.bind.apply(t, o))();
return r && _setPrototypeOf(p, r.prototype), p;
}
function _defineProperties(e, r) {
for (var t = 0; t < r.length; t++) {
var o = r[t];
o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o);
}
}
function _createClass(e, r, t) {
return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", {
writable: !1
}), e;
}
function _createForOfIteratorHelper(r, e) {
var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
if (!t) {
if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
t && (r = t);
var n = 0,
F = function () {};
return {
s: F,
n: function () {
return n >= r.length ? {
done: !0
} : {
done: !1,
value: r[n++]
};
},
e: function (r) {
throw r;
},
f: F
};
}
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
var o,
a = !0,
u = !1;
return {
s: function () {
t = t.call(r);
},
n: function () {
var r = t.next();
return a = r.done, r;
},
e: function (r) {
u = !0, o = r;
},
f: function () {
try {
a || null == t.return || t.return();
} finally {
if (u) throw o;
}
}
};
}
function _defineProperty$1(e, r, t) {
return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
value: t,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[r] = t, e;
}
function _get() {
return _get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) {
var p = _superPropBase(e, t);
if (p) {
var n = Object.getOwnPropertyDescriptor(p, t);
return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value;
}
}, _get.apply(null, arguments);
}
function _getPrototypeOf(t) {
return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {
return t.__proto__ || Object.getPrototypeOf(t);
}, _getPrototypeOf(t);
}
function _inherits(t, e) {
if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function");
t.prototype = Object.create(e && e.prototype, {
constructor: {
value: t,
writable: !0,
configurable: !0
}
}), Object.defineProperty(t, "prototype", {
writable: !1
}), e && _setPrototypeOf(t, e);
}
function _isNativeFunction(t) {
try {
return -1 !== Function.toString.call(t).indexOf("[native code]");
} catch (n) {
return "function" == typeof t;
}
}
function _isNativeReflectConstruct() {
try {
var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
} catch (t) {}
return (_isNativeReflectConstruct = function () {
return !!t;
})();
}
function _iterableToArray(r) {
if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
}
function _iterableToArrayLimit(r, l) {
var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
if (null != t) {
var e,
n,
i,
u,
a = [],
f = !0,
o = !1;
try {
if (i = (t = t.call(r)).next, 0 === l) {
if (Object(t) !== t) return;
f = !1;
} else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
} catch (r) {
o = !0, n = r;
} finally {
try {
if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
} finally {
if (o) throw n;
}
}
return a;
}
}
function _nonIterableRest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function ownKeys(e, r) {
var t = Object.keys(e);
if (Object.getOwnPropertySymbols) {
var o = Object.getOwnPropertySymbols(e);
r && (o = o.filter(function (r) {
return Object.getOwnPropertyDescriptor(e, r).enumerable;
})), t.push.apply(t, o);
}
return t;
}
function _objectSpread2(e) {
for (var r = 1; r < arguments.length; r++) {
var t = null != arguments[r] ? arguments[r] : {};
r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
_defineProperty$1(e, r, t[r]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
});
}
return e;
}
function _objectWithoutProperties(e, t) {
if (null == e) return {};
var o,
r,
i = _objectWithoutPropertiesLoose(e, t);
if (Object.getOwnPropertySymbols) {
var s = Object.getOwnPropertySymbols(e);
for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
}
return i;
}
function _objectWithoutPropertiesLoose(r, e) {
if (null == r) return {};
var t = {};
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
if (e.includes(n)) continue;
t[n] = r[n];
}
return t;
}
function _possibleConstructorReturn(t, e) {
if (e && ("object" == typeof e || "function" == typeof e)) return e;
if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
return _assertThisInitialized(t);
}
function _setPrototypeOf(t, e) {
return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
return t.__proto__ = e, t;
}, _setPrototypeOf(t, e);
}
function _slicedToArray(r, e) {
return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
}
function _superPropBase(t, o) {
for (; !{}.hasOwnProperty.call(t, o) && null !== (t = _getPrototypeOf(t)););
return t;
}
function _superPropGet(t, o, e, r) {
var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e);
return 2 & r && "function" == typeof p ? function (t) {
return p.apply(e, t);
} : p;
}
function _toConsumableArray(r) {
return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();
}
function _toPrimitive(t, r) {
if ("object" != typeof t || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != typeof i) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == typeof i ? i : i + "";
}
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _unsupportedIterableToArray(r, a) {
if (r) {
if ("string" == typeof r) return _arrayLikeToArray(r, a);
var t = {}.toString.call(r).slice(8, -1);
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
}
}
function _wrapNativeSuper(t) {
var r = "function" == typeof Map ? new Map() : void 0;
return _wrapNativeSuper = function (t) {
if (null === t || !_isNativeFunction(t)) return t;
if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function");
if (void 0 !== r) {
if (r.has(t)) return r.get(t);
r.set(t, Wrapper);
}
function Wrapper() {
return _construct(t, arguments, _getPrototypeOf(this).constructor);
}
return Wrapper.prototype = Object.create(t.prototype, {
constructor: {
value: Wrapper,
enumerable: !1,
writable: !0,
configurable: !0
}
}), _setPrototypeOf(Wrapper, t);
}, _wrapNativeSuper(t);
}
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
function unwrapExports (x) {
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
}
function createCommonjsModule(fn, module) {
return module = { exports: {} }, fn(module, module.exports), module.exports;
}
function getCjsExportFromNamespace (n) {
return n && n['default'] || n;
}
var SearchCore_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.SearchCore = void 0;
/**
* Provides methods for executing searches, submitting questions, and performing autocompletes.
*
* @public
*/
class SearchCore {
constructor(searchService, questionSubmissionService, autoCompleteService, generativeDirectAnswerService) {
this.searchService = searchService;
this.questionSubmissionService = questionSubmissionService;
this.autoCompleteService = autoCompleteService;
this.generativeDirectAnswerService = generativeDirectAnswerService;
}
/**
* Performs a search across all verticals.
*
* @remarks
* If rejected, the reason will be an {@link SearchError}.
*
* @param request - Universal search request options
*/
universalSearch(request) {
return this.searchService.universalSearch(request);
}
/**
* Performs a search for a single vertical.
*
* @remarks
* If rejected, the reason will be an {@link SearchError}.
*
* @param request - Vertical search request options
*/
verticalSearch(request) {
return this.searchService.verticalSearch(request);
}
/**
* Submits a custom question to the Search API.
*
* @remarks
* If rejected, the reason will be an {@link SearchError}.
*
* @param request - Question submission request options
*/
submitQuestion(request) {
return this.questionSubmissionService.submitQuestion(request);
}
/**
* Performs an autocomplete request across all verticals.
*
* @remarks
* If rejected, the reason will be an {@link SearchError}.
*
* @param request - Universal autocomplete request options
*/
universalAutocomplete(request) {
return this.autoCompleteService.universalAutocomplete(request);
}
/**
* Performs an autocomplete request for a single vertical.
*
* @remarks
* If rejected, the reason will be an {@link SearchError}.
*
* @param request - Vertical autocomplete request options
*/
verticalAutocomplete(request) {
return this.autoCompleteService.verticalAutocomplete(request);
}
/**
* Performs a filtersearch request against specified fields within a single vertical.
*
* @remarks
* This differs from the vertical autocomplete because the vertical autocomplete
* operates on all entity fields whereas filtersearch operates only on specified fields.
* If rejected, the reason will be an {@link SearchError}.
*
* @example
* A site has a 'products' vertical and would like a way to allow the user to narrow down
* the results by the product name. The site can add a second search bar powered by filtersearch
* which will include only product names as search suggestions.
*
* @param request - filtersearch request options
*/
filterSearch(request) {
return this.autoCompleteService.filterSearch(request);
}
/**
* Performs a generative direct answer request.
*
* @remarks
* If rejected, the reason will be an {@link SearchError}.
*
* @param request - Generative direct answer request options
*/
generativeDirectAnswer(request) {
return this.generativeDirectAnswerService.generateAnswer(request);
}
}
exports.SearchCore = SearchCore;
});
unwrapExports(SearchCore_1);
SearchCore_1.SearchCore;
var DirectAnswerType_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.DirectAnswerType = void 0;
(function (DirectAnswerType) {
/** Indicates that the DirectAnswer is a {@link FeaturedSnippetDirectAnswer}. */
DirectAnswerType["FeaturedSnippet"] = "FEATURED_SNIPPET";
/** Indicates that the DirectAnswer is a {@link FieldValueDirectAnswer}. */
DirectAnswerType["FieldValue"] = "FIELD_VALUE";
})(exports.DirectAnswerType || (exports.DirectAnswerType = {}));
});
unwrapExports(DirectAnswerType_1);
DirectAnswerType_1.DirectAnswerType;
var Source_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.Source = void 0;
(function (Source) {
/** The result is from a Knowledge Graph. */
Source["KnowledgeManager"] = "KNOWLEDGE_MANAGER";
/** The result is from Google Custom Search Engine. */
Source["Google"] = "GOOGLE_CSE";
/** The result was from a custom source. */
Source["Custom"] = "CUSTOM_SEARCHER";
/** The result is from a document vertical. */
Source["DocumentVertical"] = "DOCUMENT_VERTICAL";
/** The result is from a function vertical. */
Source["FunctionVertical"] = "FUNCTION_VERTICAL";
})(exports.Source || (exports.Source = {}));
});
unwrapExports(Source_1);
Source_1.Source;
var ResultsFactory_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.ResultsFactory = void 0;
/**
* A factory which creates results from different sources
*/
class ResultsFactory {
static create(results, source) {
if (!results) {
return [];
}
return results.map((result, index) => {
const resultIndex = index + 1;
switch (source) {
case Source_1.Source.KnowledgeManager:
return this.fromKnowledgeManager(result, resultIndex);
case Source_1.Source.Google:
return this.fromGoogleCustomSearchEngine(result, resultIndex);
case Source_1.Source.DocumentVertical:
return this.fromDocumentVertical(result, resultIndex);
case Source_1.Source.FunctionVertical:
return this.fromFunctionVertical(result, resultIndex);
default:
return this.fromCustomSource(result, resultIndex);
}
});
}
static fromKnowledgeManager(result, index) {
var _a;
const rawData = (_a = result.data) !== null && _a !== void 0 ? _a : result;
return {
rawData: rawData,
source: Source_1.Source.KnowledgeManager,
index: index,
name: rawData.name,
description: rawData.description,
link: rawData.website,
id: rawData.id,
distance: result.distance,
distanceFromFilter: result.distanceFromFilter,
highlightedFields: result.highlightedFields,
entityType: rawData.type
};
}
static fromDocumentVertical(result, index) {
var _a;
const rawData = (_a = result.data) !== null && _a !== void 0 ? _a : result;
return {
rawData: rawData,
source: Source_1.Source.DocumentVertical,
name: rawData.name,
description: rawData.description,
link: rawData.website,
id: rawData.id,
index: index,
segment: result.segment,
document: result.document,
documents: result.documents
};
}
static fromGoogleCustomSearchEngine(result, index) {
var _a;
const rawData = (_a = result.data) !== null && _a !== void 0 ? _a : result;
return {
rawData: rawData,
source: Source_1.Source.Google,
index: index,
name: rawData.htmlTitle.replace(/(<([^>]+)>)/ig, ''),
description: rawData.htmlSnippet,
link: rawData.link
};
}
static fromCustomSource(result, index) {
return this.fromCustomDataHelper(result, index, Source_1.Source.Custom);
}
static fromFunctionVertical(result, index) {
return this.fromCustomDataHelper(result, index, Source_1.Source.FunctionVertical);
}
static fromCustomDataHelper(result, index, source) {
var _a;
const rawData = (_a = result.data) !== null && _a !== void 0 ? _a : result;
return {
rawData: rawData,
source: source,
index: index,
name: rawData.name,
description: rawData.description,
link: rawData.website,
id: rawData.id
};
}
static fromDirectAnswer(result) {
var _a;
const rawData = (_a = result.fieldValues) !== null && _a !== void 0 ? _a : {};
return {
rawData: rawData,
source: Source_1.Source.KnowledgeManager,
name: rawData.name,
description: rawData.description,
link: result.website,
id: result.id,
entityType: result.type,
};
}
}
exports.ResultsFactory = ResultsFactory;
});
unwrapExports(ResultsFactory_1);
ResultsFactory_1.ResultsFactory;
var BuiltInFieldType_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.BuiltInFieldType = void 0;
(function (BuiltInFieldType) {
BuiltInFieldType["URL"] = "url";
BuiltInFieldType["ComplexURL"] = "complex_url";
BuiltInFieldType["IOSAppURL"] = "ios_app_url";
BuiltInFieldType["AndroidAppURL"] = "android_app_url";
BuiltInFieldType["FacebookURL"] = "facebook_url";
BuiltInFieldType["Email"] = "email";
BuiltInFieldType["InstagramHandle"] = "instagram_handle";
BuiltInFieldType["TwitterHandle"] = "twitter_handle";
BuiltInFieldType["Phone"] = "phone";
BuiltInFieldType["Address"] = "address";
BuiltInFieldType["Hours"] = "hours";
BuiltInFieldType["Decimal"] = "decimal";
BuiltInFieldType["Integer"] = "integer";
BuiltInFieldType["SingleLineText"] = "single_line_text";
BuiltInFieldType["RichText"] = "rich_text";
BuiltInFieldType["MultiLineText"] = "multi_line_text";
BuiltInFieldType["RichText_v2"] = "rich_text_v2";
BuiltInFieldType["Html"] = "html";
BuiltInFieldType["Markdown"] = "markdown";
})(exports.BuiltInFieldType || (exports.BuiltInFieldType = {}));
});
unwrapExports(BuiltInFieldType_1);
BuiltInFieldType_1.BuiltInFieldType;
var createDirectAnswer_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.createDirectAnswer = void 0;
const supportedFieldTypes = [
BuiltInFieldType_1.BuiltInFieldType.MultiLineText,
BuiltInFieldType_1.BuiltInFieldType.RichText,
BuiltInFieldType_1.BuiltInFieldType.RichText_v2,
BuiltInFieldType_1.BuiltInFieldType.Markdown,
BuiltInFieldType_1.BuiltInFieldType.Html
];
function createDirectAnswer(data) {
const isFieldValueDirectAnswer = (data === null || data === void 0 ? void 0 : data.type) === DirectAnswerType_1.DirectAnswerType.FieldValue;
const isFeaturedSnippetDirectAnswer = (data === null || data === void 0 ? void 0 : data.type) === DirectAnswerType_1.DirectAnswerType.FeaturedSnippet;
const commonDirectAnswerData = {
value: data.answer.value,
relatedResult: ResultsFactory_1.ResultsFactory.fromDirectAnswer(data.relatedItem.data),
verticalKey: data.relatedItem.verticalConfigId,
fieldType: Object.values(BuiltInFieldType_1.BuiltInFieldType).includes(data.answer.fieldType) ? data.answer.fieldType : 'unknown'
};
if (isFieldValueDirectAnswer) {
return Object.assign(Object.assign({ type: DirectAnswerType_1.DirectAnswerType.FieldValue }, commonDirectAnswerData), { entityName: data.answer.entityName, fieldName: data.answer.fieldName, fieldApiName: data.answer.fieldApiName });
}
else if (isFeaturedSnippetDirectAnswer) {
const fieldType = commonDirectAnswerData.fieldType;
if (!supportedFieldTypes.includes(fieldType)) {
console.warn(`Unexpected fieldType for featured snippet direct answer: ${fieldType}`);
return undefined;
}
return Object.assign(Object.assign({ type: DirectAnswerType_1.DirectAnswerType.FeaturedSnippet }, commonDirectAnswerData), { snippet: data.answer.snippet });
}
else {
throw new Error(`The Search API returned an unknown direct answer type: ${data === null || data === void 0 ? void 0 : data.type}`);
}
}
exports.createDirectAnswer = createDirectAnswer;
});
unwrapExports(createDirectAnswer_1);
createDirectAnswer_1.createDirectAnswer;
var Matcher_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.Matcher = void 0;
(function (Matcher) {
/**
* An equals comparison.
*
* @remarks
* Compatible with all field types.
*/
Matcher["Equals"] = "$eq";
/**
* A not equals comparison.
*
* @remarks
* Compatible with all field types.
*/
Matcher["NotEquals"] = "!$eq";
/**
* A less than comparison.
*
* @remarks
* Compatible with integer, float, date, datetime, and time fields.
*/
Matcher["LessThan"] = "$lt";
/**
* A less than or equal to comparison.
*
* @remarks
* Compatible with integer, float, date, datetime, and time fields.
*/
Matcher["LessThanOrEqualTo"] = "$le";
/**
* A greater than comparison.
*
* @remarks
* Compatible with integer, float, date, datetime, and time fields.
*/
Matcher["GreaterThan"] = "$gt";
/**
* A greater than or equal to comparison.
*
* @remarks
* Compatible with integer, float, date, datetime, and time fields.
*/
Matcher["GreaterThanOrEqualTo"] = "$ge";
/**
* A comparison of whether an entity is within a certain radius of a certain location.
*
* @remarks
* Only compatible with the builtin.location field.
*/
Matcher["Near"] = "$near";
/**
* A limitation of the dataset to a range of values.
*
* @remarks
* Compatible with integer and float.
*/
Matcher["Between"] = "$between";
/**
* A comparison of an entity's hours and the current time to determine whether it is open.
*
* @remarks
* Only compatible with the builtin.hours field, and only supports the value 'now'.
*/
Matcher["OpenAt"] = "$openAt";
})(exports.Matcher || (exports.Matcher = {}));
});
unwrapExports(Matcher_1);
Matcher_1.Matcher;
var createFieldValueFilter_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.createFieldValueFilter = void 0;
function createFieldValueFilter(result) {
const filter = result.filter;
const fieldId = Object.keys(filter)[0];
const matcher = Object.keys(filter[fieldId])[0];
let value;
if (matcher === Matcher_1.Matcher.Between) {
value = createNumberRangeValue(filter[fieldId][matcher]);
}
else if (matcher === Matcher_1.Matcher.Near) {
value = Object.assign(Object.assign({}, filter[fieldId][matcher]), { name: result.value });
}
else {
value = filter[fieldId][matcher];
}
return {
fieldId: fieldId,
matcher: matcher,
value
};
}
exports.createFieldValueFilter = createFieldValueFilter;
function createNumberRangeValue(value) {
const numberRangeValue = {};
Object.keys(value).forEach(limitMatcher => {
if (limitMatcher === Matcher_1.Matcher.GreaterThan || limitMatcher === Matcher_1.Matcher.GreaterThanOrEqualTo) {
numberRangeValue.start = { matcher: limitMatcher, value: value[limitMatcher] };
}
else if (limitMatcher === Matcher_1.Matcher.LessThan || limitMatcher === Matcher_1.Matcher.LessThanOrEqualTo) {
numberRangeValue.end = { matcher: limitMatcher, value: value[limitMatcher] };
}
});
return numberRangeValue;
}
});
unwrapExports(createFieldValueFilter_1);
createFieldValueFilter_1.createFieldValueFilter;
var createFacets_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.createFacets = void 0;
function createFacets(facets) {
if (!facets) {
return [];
}
return facets.map((facet) => ({
fieldId: facet.fieldId,
displayName: facet.displayName,
options: createFacetOptions(facet.options)
}));
}
exports.createFacets = createFacets;
function createFacetOptions(options) {
return options.map((option) => {
const filter = (0, createFieldValueFilter_1.createFieldValueFilter)(option);
return {
displayName: option.displayName,
count: option.count,
selected: option.selected,
matcher: filter.matcher,
value: filter.value
};
});
}
});
unwrapExports(createFacets_1);
createFacets_1.createFacets;
var createLocationBias_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.createLocationBias = void 0;
function createLocationBias(data) {
return {
latitude: data.latitude,
longitude: data.longitude,
displayName: data.locationDisplayName,
method: data.accuracy
};
}
exports.createLocationBias = createLocationBias;
});
unwrapExports(createLocationBias_1);
createLocationBias_1.createLocationBias;
var createSpellCheck_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.createSpellCheck = void 0;
function createSpellCheck(data) {
return {
originalQuery: data.originalQuery,
correctedQuery: data.correctedQuery.value,
type: data.type,
matchedSubstrings: data.correctedQuery.matchedSubstrings
};
}
exports.createSpellCheck = createSpellCheck;
});
unwrapExports(createSpellCheck_1);
createSpellCheck_1.createSpellCheck;
var createAppliedQueryFilter_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.createAppliedQueryFilter = void 0;
function createAppliedQueryFilter(data) {
return Object.assign({ displayKey: data.displayKey, displayValue: data.displayValue, filter: (0, createFieldValueFilter_1.createFieldValueFilter)(data), type: data.type }, (data.details && { details: data.details }));
}
exports.createAppliedQueryFilter = createAppliedQueryFilter;
});
unwrapExports(createAppliedQueryFilter_1);
createAppliedQueryFilter_1.createAppliedQueryFilter;
var createVerticalResults_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.createVerticalResults = void 0;
function createVerticalResults(data) {
const appliedQueryFilters = data.appliedQueryFilters
? data.appliedQueryFilters.map(createAppliedQueryFilter_1.createAppliedQueryFilter)
: [];
return {
appliedQueryFilters: appliedQueryFilters,
queryDurationMillis: data.queryDurationMillis,
results: ResultsFactory_1.ResultsFactory.create(data.results, data.source),
resultsCount: data.resultsCount,
source: data.source,
verticalKey: data.verticalConfigId,
};
}
exports.createVerticalResults = createVerticalResults;
});
unwrapExports(createVerticalResults_1);
createVerticalResults_1.createVerticalResults;
var createVerticalSearchResponse_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.createVerticalSearchResponse = void 0;
function createVerticalSearchResponse(data) {
var _a, _b, _c;
return {
verticalResults: (0, createVerticalResults_1.createVerticalResults)(data.response),
queryId: data.response.queryId,
directAnswer: data.response.directAnswer && (0, createDirectAnswer_1.createDirectAnswer)(data.response.directAnswer),
searchIntents: data.response.searchIntents,
facets: (0, createFacets_1.createFacets)(data.response.facets),
spellCheck: data.response.spellCheck && (0, createSpellCheck_1.createSpellCheck)(data.response.spellCheck),
locationBias: data.response.locationBias && (0, createLocationBias_1.createLocationBias)(data.response.locationBias),
allResultsForVertical: data.response.allResultsForVertical
&& createVerticalSearchResponse({ response: data.response.allResultsForVertical }),
alternativeVerticals: (_b = (_a = data.response.alternativeVerticals) === null || _a === void 0 ? void 0 : _a.modules) === null || _b === void 0 ? void 0 : _b.map(createVerticalResults_1.createVerticalResults),
uuid: (_c = data.meta) === null || _c === void 0 ? void 0 : _c.uuid,
queryRulesActionsData: data.response.queryRulesActionsData
};
}
exports.createVerticalSearchResponse = createVerticalSearchResponse;
});
unwrapExports(createVerticalSearchResponse_1);
createVerticalSearchResponse_1.createVerticalSearchResponse;
var Environment_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.Environment = void 0;
(function (Environment) {
Environment["PROD"] = "prod";
Environment["SANDBOX"] = "sbx";
/** For internal development only */
Environment["QA"] = "qa";
/** For internal development only */
Environment["DEV"] = "dev";
})(exports.Environment || (exports.Environment = {}));
});
unwrapExports(Environment_1);
Environment_1.Environment;
var CloudRegion_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.CloudRegion = void 0;
(function (CloudRegion) {
CloudRegion["US"] = "us";
CloudRegion["EU"] = "eu";
})(exports.CloudRegion || (exports.CloudRegion = {}));
});
unwrapExports(CloudRegion_1);
CloudRegion_1.CloudRegion;
var CloudChoice_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.CloudChoice = void 0;
(function (CloudChoice) {
CloudChoice["GLOBAL_MULTI"] = "GLOBAL-MULTI";
CloudChoice["GLOBAL_GCP"] = "GLOBAL-GCP";
})(exports.CloudChoice || (exports.CloudChoice = {}));
});
unwrapExports(CloudChoice_1);
CloudChoice_1.CloudChoice;
var provideEndpoints = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.SandboxEndpoints = exports.EndpointsFactory = exports.defaultApiVersion = void 0;
exports.defaultApiVersion = 20220511;
/**
* Provides methods for getting various endpoints.
*
* @internal
*/
class EndpointsFactory {
constructor(config) {
this.environment = (config === null || config === void 0 ? void 0 : config.environment) || Environment_1.Environment.PROD;
this.cloudRegion = (config === null || config === void 0 ? void 0 : config.cloudRegion) || CloudRegion_1.CloudRegion.US;
this.cloudChoice = (config === null || config === void 0 ? void 0 : config.cloudChoice) || CloudChoice_1.CloudChoice.GLOBAL_MULTI;
}
/** Provides the domain based on environment and cloud region. */
getDomain() {
if (this.isInternalTestEnvironment() && this.cloudRegion === CloudRegion_1.CloudRegion.US) {
return `https://liveapi-${this.environment}.yext.com`;
}
switch (this.cloudChoice) {
case CloudChoice_1.CloudChoice.GLOBAL_GCP:
return `https://${this.environment}-cdn-gcp.${this.cloudRegion}.yextapis.com`;
case CloudChoice_1.CloudChoice.GLOBAL_MULTI:
default:
return `https://${this.environment}-cdn.${this.cloudRegion}.yextapis.com`;
}
}
/** Provides the cached domain based on environment and cloud region. */
getCachedDomain() {
if (this.isInternalTestEnvironment() && this.cloudRegion === CloudRegion_1.CloudRegion.US) {
return `https://liveapi-${this.environment}.yext.com`;
}
switch (this.cloudChoice) {
case CloudChoice_1.CloudChoice.GLOBAL_GCP:
return `https://${this.environment}-cdn-cached-gcp.${this.cloudRegion}.yextapis.com`;
case CloudChoice_1.CloudChoice.GLOBAL_MULTI:
default:
return `https://${this.environment}-cdn-cached.${this.cloudRegion}.yextapis.com`;
}
}
/** Provides all endpoints based on environment and cloud region. */
getEndpoints() {
return {
universalSearch: `${this.getDomain()}/v2/accounts/me/search/query`,
verticalSearch: `${this.getDomain()}/v2/accounts/me/search/vertical/query`,
questionSubmission: `${this.getDomain()}/v2/accounts/me/createQuestion`,
status: 'https://answersstatus.pagescdn.com',
universalAutocomplete: `${this.getCachedDomain()}/v2/accounts/me/search/autocomplete`,
verticalAutocomplete: `${this.getCachedDomain()}/v2/accounts/me/search/vertical/autocomplete`,
filterSearch: `${this.getDomain()}/v2/accounts/me/search/filtersearch`,
generativeDirectAnswer: `${this.getDomain()}/v2/accounts/me/search/generateAnswer`,
};
}
isInternalTestEnvironment() {
return this.environment === Environment_1.Environment.DEV || this.environment === Environment_1.Environment.QA;
}
}
exports.EndpointsFactory = EndpointsFactory;
/**
* The endpoints to use for sandbox experiences.
*
* @deprecated Set the appropriate environment and cloud region in {@link ServingConfig} instead.
*
* @public
*/
exports.SandboxEndpoints = new EndpointsFactory({
environment: Environment_1.Environment.SANDBOX,
cloudRegion: CloudRegion_1.CloudRegion.US,
cloudChoice: CloudChoice_1.CloudChoice.GLOBAL_MULTI
})
.getEndpoints();
});
unwrapExports(provideEndpoints);
provideEndpoints.SandboxEndpoints;
provideEndpoints.EndpointsFactory;
provideEndpoints.defaultApiVersion;
var QuerySource_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.QuerySource = void 0;
(function (QuerySource) {
/**
* Indicates that the query was initiated from a standard Search integration.
*/
QuerySource["Standard"] = "STANDARD";
/**
* Indicates that the query was initiated from a Search Overlay.
*/
QuerySource["Overlay"] = "OVERLAY";
/**
* Indicates that the query was initiated from visual autocomplete.
*/
QuerySource["Autocomplete"] = "AUTOCOMPLETE";
})(exports.QuerySource || (exports.QuerySource = {}));
});
unwrapExports(QuerySource_1);
QuerySource_1.QuerySource;
var createFailedVertical_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.createFailedVertical = void 0;
function createFailedVertical(data) {
return {
verticalKey: data.verticalConfigId,
errorType: data.errorType,
queryDurationMillis: data.queryDurationMillis,
details: data.details
};
}
exports.createFailedVertical = createFailedVertical;
});
unwrapExports(createFailedVertical_1);
createFailedVertical_1.createFailedVertical;
var createUniversalSearchResponse_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.createUniversalSearchResponse = void 0;
function createUniversalSearchResponse(data) {
var _a;
const verticalResults = Array.isArray(data.response.modules)
? data.response.modules.map(createVerticalResults_1.createVerticalResults)
: [];
return {
verticalResults: verticalResults,
queryId: data.response.queryId,
directAnswer: data.response.directAnswer && (0, createDirectAnswer_1.createDirectAnswer)(data.response.directAnswer),
searchIntents: data.response.searchIntents,
spellCheck: data.response.spellCheck && (0, createSpellCheck_1.createSpellCheck)(data.response.spellCheck),
locationBias: data.response.locationBias && (0, createLocationBias_1.createLocationBias)(data.response.locationBias),
uuid: data.meta.uuid,
queryRulesActionsData: data.response.queryRulesActionsData,
failedVerticals: (_a = data.response.failedVerticals) === null || _a === void 0 ? void 0 : _a.map(createFailedVertical_1.createFailedVertical)
};
}
exports.createUniversalSearchResponse = createUniversalSearchResponse;
});
unwrapExports(createUniversalSearchResponse_1);
createUniversalSearchResponse_1.createUniversalSearchResponse;
var NumberRangeValue = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.isNumberRangeValue = void 0;
function isNumberRangeValue(data) {
return typeof data === 'object' && !!data && ('start' in data || 'end' in data);
}
exports.isNumberRangeValue = isNumberRangeValue;
});
unwrapExports(NumberRangeValue);
NumberRangeValue.isNumberRangeValue;
var serializeStaticFilters_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.shapeFieldValueFilterForApi = exports.serializeStaticFilters = void 0;
function serializeStaticFilters(filter) {
if (filter.kind !== 'fieldValue') {
const shapedFilter = shapeCombinedFilterForApi(filter.combinator, filter.filters);
return shapedFilter && JSON.stringify(shapedFilter);
}
return JSON.stringify(shapeFieldValueFilterForApi(filter));
}
exports.serializeStaticFilters = serializeStaticFilters;
function shapeCombinedFilterForApi(combinator, filters) {
const shapedFilters = [];
for (const filter of filters) {
if (filter.kind !== 'fieldValue') {
const shapedFilter = shapeCombinedFilterForApi(filter.combinator, filter.filters);
shapedFilter && shapedFilters.push(shapedFilter);
}
else {
shapedFilters.push(shapeFieldValueFilterForApi(filter));
}
}
return shapedFilters.length === 0
? undefined
: shapedFilters.length === 1
? shapedFilters[0]
: { [combinator]: shapedFilters };
}
function shapeFieldValueFilterForApi(filter) {
let filterValues = {};
if ((0, NumberRangeValue.isNumberRangeValue)(filter.value)) {
if (filter.value.start) {
filterValues[filter.value.start.matcher] = filter.value.start.value;
}
if (filter.value.end) {
filterValues[filter.value.end.matcher] = filter.value.end.value;
}
}
else {
filterValues = { [filter.matcher]: filter.value };
}
return {
[filter.fieldId]: filterValues
};
}
exports.shapeFieldValueFilterForApi = shapeFieldValueFilterForApi;
});
unwrapExports(serializeStaticFilters_1);
serializeStaticFilters_1.shapeFieldValueFilterForApi;
serializeStaticFilters_1.serializeStaticFilters;
var serializeFacets_1 = createCommonjsModule(function (module, exports) {
Object.defineProperty(exports, "__esModule", { value: true });
exports.serializeFacets = void 0;
function serializeFacets(filters) {
return JSON.stringify(filters.reduce((obj, facet) => {
const fieldId = facet.fieldId;
const shapedFacets = shapeFacetOptionArrayForApi(facet.options, fieldId);
obj[fieldId] = shapedFacets;
return obj;
}, {}));
}
exports.serializeFacets = serializeFacets;
function shapeFacetOptionArrayForApi(options, fieldId) {
return options.map((option) => {
return (0, serializeStaticFilters_1.shapeFieldValueFilterForApi)(Object.assign(Object.assign({}, option), { fieldId: fieldId }));
});
}
});
unwrapExports(serializeFacets_1);
serializeFacets_1.serializeFacets;
var name = "@yext/search-core";
var version = "2.8.0";
var description = "Typescript Networking Library for the Yext Search API";
var main = "./dist/commonjs/src/index.js";
var module = "./dist/esm/src/index.js";
var types = "./dist/bundle.d.ts";
var sideEffects = false;
var keywords = [
"networking",
"search api",
"search",
"browser",
"nodejs",
"typescript",
"commonjs",
"es6",
"yext"
];
var files = [
"dist",
"legacy",
"lib",
"src",
"THIRD-PARTY-NOTICES"
];
var engines = {
node: ">=12"
};
var scripts = {
test: "npm run lint && jest",
lint: "eslint . --max-warnings=0",
"tsc-cjs": "tsc -p tsconfig.cjs.json",
"tsc-esm": "tsc -p tsconfig.esm.json",
tsc: "npm run tsc-cjs && npm run tsc-esm",
"build-legacy-bundle": "npx webpack",
build: "rm -rf dist/** && npm run tsc && npm run build-legacy-bundle && npm run api-extractor && npm run generate-docs",
"build-ci": "npm run tsc-cjs && npm run api-extractor && npm run generate-docs",
dev: "npm run tsc-esm -- --watch",
prepublishOnly: "npm run build",
"api-extractor": "api-extractor run --local --verbose",
"generate-docs": "api-documenter markdown --input-folder temp --output-folder docs && rm -rf temp && npm run generate-notices",
"generate-notices": "generate-license-file --input package.json --output THIRD-PARTY-NOTICES --overwrite"
};
var repository = {
type: "git",
url: "https://github.com/yext/search-core.git"
};
var author = "slapshot@yext.com";
var license = "BSD-3-Clause";
var bugs = {
url: "https://github.com/yext/search-core/issues"
};
var homepage = "https://github.com/yext/search-core#readme";
var devDependencies = {
"@babel/core": "^7.12.3",
"@babel/plugin-transform-runtime": "^7.23.2",
"@babel/preset-env": "^7.23.2",
"@babel/preset-typescript": "^7.12.1",
"@microsoft/api-documenter": "^7.13.76",
"@microsoft/api-extractor": "^7.19.2",
"@types/jest": "^28.1.1",
"@typescript-eslint/eslint-plugin": "^5.16.0",
"@typescript-eslint/parser": "^5.16.0",
"@yext/eslint-config-slapshot": "^0.4.0",
"@yext/eslint-plugin-export-star": "^1.0.2",
"babel-jest": "^28.1.0",
"babel-loader": "^8.3.0",
eslint: "^8.11.0",
"eslint-config-react-app": "^7.0.1",
"eslint-plugin-tsdoc": "^0.2.14",
"generate-license-file": "^4.1.0",
jest: "^28.1.0",
"jest-environment-jsdom": "^28.1.0",
"ts-loader": "^8.4.0",
typescript: "^4.0.3",
webpack: "^5.90.0",
"webpack-cli": "^4.4.0"
};
var dependencies = {
"@babel/runtime-corejs3": "^7.12.5",
"cross-fetch": "^3.1.5"
};
var jest = {
bail: 0,
collectCoverage: true,
collectCoverageFrom: [
"src/**",
"!src/models/**/*.ts"
],
verbose: true,
moduleFileExtensions: [
"js",
"ts"
],
moduleDirectories: [
"node_modules",
"<rootDir>"
],
testEnvironment: "jsdom",
testPathIgnorePatterns: [
"./tests/mocks/*"
],
testMatch: [
"<rootDir>/tests/**/*.[jt]s"
]
};
var _package = {
name: name,
version: version,
description: description,
main: main,
module: module,
types: types,
sideEffects: sideEffects,
keywords: keywords,
files: files,
engines: engines,
scripts: scripts,
repository: repository,
author: author,
license: license,
bugs: bugs,
homepage: homepage,
devDependencies: devDependencies,
dependencies: dependencies,
jest: jest
};
var _package$1 = /*#__PURE__*/Object.freeze({
__proto__: null,
name: name,
version: version,
description: description,
main: main,
module: module,
types: types,
sideEffects: sideEffects,
keywords: keywords,
files: files,
engines: engines,
scripts: scripts,
repository: repository,
author: author,
license: license,
bugs: bugs,
homepage: homepage,
devDependencies: devDependencies,
dependencies: dependencies,
jest: jest,
'default': _package
});
var require$$0 = getCjsExportFromNamespace(_package$1);
var getClientSdk_1 = createCommonjsModule(function (module, exports) {
var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getClientSdk = void 0;
const package_json_1 = __importDefault(require$$0);
const { version } = package_json_1.default;
function getClientSdk(additionalHttpHeaders) {
var _a;
const coreAgent = { ANSWERS_CORE: version };
if (!additionalHttpHeaders) {
return coreAgent;
}
const customClientSdk = (_a = additionalHttpHeaders['Client-SDK']) !== null && _a !== void 0 ? _a : {};
return Object.entries(customClientSdk).reduce((clientSdk, [agent, version]) => {
return version
? Object.assign(Object.assign({}, clientSdk), { [agent]: version }) : clientSdk;
}, coreAgent);
}
exports.getClientSdk = getClientSdk;
});
unwrapExports(getClientSdk_1);
getClientSdk_1.getClientSdk;
var SearchServiceImpl_1 = createCommonjsModule(function (module, exports) {
var __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
f