@yext/search-core
Version:
Typescript Networking Library for the Yext Search API
39 lines • 2.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createDirectAnswer = void 0;
const DirectAnswerType_1 = require("../../models/searchservice/response/directanswer/DirectAnswerType");
const ResultsFactory_1 = require("./ResultsFactory");
const BuiltInFieldType_1 = require("../../models/searchservice/response/directanswer/BuiltInFieldType");
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;
//# sourceMappingURL=createDirectAnswer.js.map