{"version":3,"file":"static/chunks/3688.5c49f7df667b6a89.js","mappings":"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","sources":["webpack://_N_E/./src/contentful/search/is-search-hit-type.ts","webpack://_N_E/./src/contentful/lib/create-contentful-component.tsx","webpack://_N_E/./src/hooks/use-search.ts","webpack://_N_E/./src/contentful/components/utils/use-search.props.ts","webpack://_N_E/./src/contentful/search/search-highlight.ts","webpack://_N_E/./src/contentful/search/search-article-tease.ts","webpack://_N_E/./src/contentful/components/utils/strip-html.ts"],"sourcesContent":["import { SearchHit, SearchHitTypes } from \"frontend/types\";\n\nexport function isSearchHitType<T extends SearchHit>(\n hitType: SearchHitTypes,\n searchHit?: SearchHit,\n): searchHit is T {\n if (searchHit === undefined) return false;\n\n if (hitType === \"modern\") {\n return \"url\" in searchHit && \"title\" in searchHit;\n }\n if (hitType === \"hollis\") {\n return \"title\" in searchHit;\n }\n if (hitType === \"modernArticle\") {\n return \"contentType\" in searchHit && searchHit.contentType === \"Article\";\n }\n if (hitType === \"modernProgram\") {\n return \"contentType\" in searchHit && searchHit.contentType === \"Program\";\n }\n if (hitType === \"legacy\" || hitType === \"legacyArticle\") {\n return \"HBSLink\" in searchHit && \"HBSTitle\" in searchHit;\n }\n\n if (hitType === \"knowledgeSuggest\") {\n return \"Faculty\" in searchHit && \"suggestions\" in searchHit;\n }\n\n return false;\n}\n","import { ContentfulEntry, EntryRef } from \"frontend/contentful/schema/sys\";\nimport { useContentful } from \"frontend/hooks/use-contentful\";\nimport { ComponentType, ReactNode } from \"react\";\nimport { CreateEditAttributesFn } from \"./edit-attributes-factory\";\n\nexport interface ContentfulComponentProps<\n E extends ContentfulEntry,\n O = Record<string, unknown>,\n> {\n entry: E;\n options: O | undefined;\n createEditAttributes: CreateEditAttributesFn;\n}\n\nexport type ContentfulComponent<E extends ContentfulEntry, O> = (\n props: ContentfulComponentProps<E, O>,\n) => ReactNode;\nexport interface ContentfulComponentRenderProps<\n E extends ContentfulEntry,\n O = void,\n> {\n entry?: EntryRef<E>;\n options?: O;\n}\nexport type ContentfulFactoryComponent<\n E extends ContentfulEntry,\n O = void,\n> = ComponentType<ContentfulComponentRenderProps<E, O>>;\n\nexport function createContentfulComponent<E extends ContentfulEntry, O = void>(\n Component: ContentfulComponent<E, O>,\n) {\n const ContentfulComponent: ContentfulFactoryComponent<E, O> = ({\n entry: ref,\n options,\n }) => {\n const { getEntry, createEditAttributes } = useContentful();\n\n const entry = getEntry(ref);\n\n if (!entry?.fields || !entry?.metadata || !entry?.sys.id) return null;\n\n return (\n <Component\n entry={entry}\n options={options}\n createEditAttributes={createEditAttributes}\n />\n );\n };\n\n return ContentfulComponent;\n}\n","import {\n ModernSearchHit,\n SearchHit,\n SearchQuery,\n SearchResults,\n} from \"frontend/types\";\nimport { UseFetchProps, useFetch } from \"./use-fetch\";\n\ntype UseSearchArgs = SearchQuery | null | undefined;\n\nconst searchApiUrl = \"/api/search/query\";\n\nexport function createSearchParams(search: UseSearchArgs) {\n if (search?.query === undefined) return {};\n\n return {\n from: search?.from?.toString(),\n size: search?.size?.toString(),\n index: search.index,\n query: search.query,\n facets: search?.facets?.join(\",\"),\n filters: search?.filters,\n sort: search?.sort,\n facetLimit: search?.facetLimit?.toString(),\n };\n}\n\ninterface UseSearchOptions {\n dedupe?: boolean;\n defaultSize?: number;\n}\n\nexport function useSearch<T extends object = SearchHit>(\n search: UseSearchArgs,\n options: UseSearchOptions = {},\n) {\n let size = search?.size;\n\n if (options.dedupe) {\n size = (size ?? 25) + 10; // add extra results to dedupe\n }\n\n const fetchProps: UseFetchProps = {\n url: searchApiUrl,\n params: createSearchParams({ ...search, size }),\n };\n\n const result = useFetch<SearchResults<T>>(fetchProps);\n\n if (options.dedupe && result.data?.hits) {\n dedupeSearchData({ search, options, data: result.data });\n }\n\n return result;\n}\n\nexport function useMultiSearch<T extends object = ModernSearchHit>(\n search: Array<UseSearchArgs>,\n options: UseSearchOptions = {},\n) {\n const fetchProps: UseFetchProps = {\n method: \"POST\",\n url: searchApiUrl,\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n queries: search.map((s) => {\n let size = s?.size;\n if (options.dedupe) size = (size ?? 25) + 10;\n return createSearchParams({ ...(s ?? {}), size });\n }),\n }),\n };\n\n const result = useFetch<Array<SearchResults<T>>>(fetchProps);\n\n if (options.dedupe && result.data) {\n result.data.forEach((data, i) =>\n dedupeSearchData<T>({ options, data, search: search[i] }),\n );\n }\n\n return result;\n}\n\ninterface DedupeSearchDataArgs<S extends object = SearchHit> {\n data: SearchResults<S>;\n search: UseSearchArgs;\n options: UseSearchOptions;\n}\n\nfunction dedupeSearchData<S extends object = SearchHit>({\n data,\n search,\n options,\n}: DedupeSearchDataArgs<S>) {\n const deduped: Array<S> = [];\n const size = search?.size ?? options.defaultSize ?? 25;\n\n for (const hit of data.hits) {\n const exists = deduped.some((item) => {\n if (\"id\" in item && \"id\" in hit && item.id === hit.id) return true;\n if (\n \"HBSTitle\" in item &&\n \"HBSTitle\" in hit &&\n item.HBSTitle === hit.HBSTitle\n ) {\n return true;\n }\n return false;\n });\n\n if (!exists) deduped.push(hit);\n if (deduped.length >= size) break;\n }\n\n data.hits = deduped;\n}\n","import { createContentfulProps } from \"frontend/contentful/lib/create-contentful-props\";\nimport { QueryEntry } from \"frontend/contentful/schema/semantics\";\nimport { SearchQuery, SearchQueryIndex } from \"frontend/types\";\n\nexport type UseSearchPropsOptions = Partial<SearchQuery>;\n\nexport const createUseSearchProps = createContentfulProps<\n QueryEntry,\n SearchQuery | null,\n UseSearchPropsOptions\n>(({ entry, options = {} }) => {\n if (!entry.fields.query) return null;\n\n const query: SearchQuery = {\n ...options,\n query:\n options.query ||\n \"(\" + entry.fields.query + \") AND -HBSDataLifecycle:Draft\",\n size: options.size || parseInt(entry.fields.limit || \"25\", 10),\n index:\n options.index || ((entry.fields.index || \"modern\") as SearchQueryIndex),\n };\n\n const sortValue = entry.fields.sort;\n\n if (!query.sort && sortValue) {\n query.sort = sortValue.join(\",\");\n\n // legacy default sort by HBSSortDate\n if (!query.sort && entry.fields.index === \"legacy\") {\n query.sort = \"HBSSortDate\";\n }\n }\n\n return query;\n});\n","export function cleanSearchHightlight(highlight?: string) {\n if (!highlight) return undefined;\n let text = highlight;\n // Update the highlights from Knowledge\n if (\n highlight &&\n highlight.indexOf(\n \"<span class='result_token' style='background-color:#ffc8c4;'>\",\n ) > -1 &&\n highlight.indexOf(\"</span>\") > -1\n ) {\n text = highlight\n .replaceAll(\n \"<span class='result_token' style='background-color:#ffc8c4;'>\",\n \"<mark>\",\n )\n .replaceAll(\"</span>\", \"</mark>\");\n }\n\n return text;\n}\n","import { ArticleTeaseProps } from \"design-system/components/primitives/article-tease/article-tease\";\nimport { MediaAssetImageProps } from \"design-system/components/primitives/media-asset/media-asset-image\";\nimport {\n SearchHit,\n ModernSearchHit,\n LegacySearchHit,\n SearchDisplay,\n} from \"frontend/types\";\nimport { stripHtml } from \"../components/utils/strip-html\";\nimport { isSearchHitType } from \"./is-search-hit-type\";\nimport { BylineAuthor } from \"design-system/components/primitives/byline/byline\";\nimport { cleanSearchHightlight } from \"./search-highlight\";\n\nexport function createSearchArticleTease(\n data?: SearchHit,\n siteId?: string,\n thumbnailProps?: Partial<MediaAssetImageProps>,\n) {\n if (isSearchHitType<ModernSearchHit>(\"modernArticle\", data)) {\n return createModernSearchArticleTease(data, siteId);\n }\n if (isSearchHitType<LegacySearchHit>(\"legacyArticle\", data)) {\n return createLegacySearchArticleTease(data, thumbnailProps);\n }\n}\n\nexport function createLegacySearchArticleTease(\n data: LegacySearchHit,\n thumbnailProps?: Partial<MediaAssetImageProps>,\n): ArticleTeaseProps {\n const props: ArticleTeaseProps = {\n type: \"Article\",\n title: data.HBSTitle,\n link: data.HBSLink,\n tease: data.HBSDescription,\n byline: {\n publicationDate: data.HBSPubDate,\n type: \"ShowAll\",\n },\n };\n\n if (data.HBSSource) {\n props.overline = { label: data.HBSSource };\n }\n\n if (data.HBSByline) {\n let people = data.HBSByline;\n let authors = data.HBSByline;\n\n if (authors.startsWith(\"by \") || authors.startsWith(\"By \")) {\n authors = authors.substring(3);\n }\n\n if (authors.startsWith(\"by: \") || authors.startsWith(\"By: \")) {\n authors = authors.substring(4);\n }\n\n if (people.startsWith(\"re \") || people.startsWith(\"Re \")) {\n people = people.substring(3);\n }\n\n if (people.startsWith(\"re: \") || people.startsWith(\"Re: \")) {\n people = people.substring(4);\n\n if (people.indexOf(\", \") > 0) {\n let peopleCleanup = \"\";\n\n people.split(\", \").forEach((person) => {\n if (person.indexOf(\"@\") > 0) return; // skip email addresses\n peopleCleanup = peopleCleanup\n ? peopleCleanup + \", \" + person\n : person;\n });\n\n people = peopleCleanup;\n }\n }\n\n if (authors !== data.HBSByline) props.byline!.authors = [{ name: authors }];\n if (people !== data.HBSByline) {\n props.byline!.featuredAuthors = [{ name: people }];\n }\n }\n\n if (data.HBSThumbnail) {\n props.image = {\n src: data.HBSThumbnail,\n ...thumbnailProps,\n };\n }\n\n return props;\n}\n\nexport function createModernSearchArticleTease(\n data: ModernSearchHit | SearchDisplay,\n siteId?: string,\n): ArticleTeaseProps {\n let description = data.description;\n\n //Modern Search Hit with \"legacy\" subset only used on sitewide Search Pages\n if (data.subset?.includes(\"legacy\") && !description) {\n description = data.body;\n }\n\n if (\n data.highlight?.description &&\n Array.isArray(data.highlight?.description)\n ) {\n description = data.highlight?.description[0];\n }\n\n if (data.highlight?.body && Array.isArray(data.highlight?.body)) {\n description = cleanSearchHightlight(data.highlight?.body[0]);\n }\n\n // Use the body as a last resort if no description is set\n if (!description && data.body) {\n description = data.body.substring(0, 500).trim();\n }\n\n const props: ArticleTeaseProps = {\n type: \"Article\",\n title: data.title,\n link: data.url,\n tease: description && stripHtml(description),\n };\n\n //if data type = ModernSearchHit then use data.display\n //if data type = SearchDisplay then use data\n //if data type = LegacySearchHit then use data.display\n if (isSearchHitType<SearchDisplay>(\"modern\", data)) {\n // Display the category as an overline when entry is for the site\n if (siteId && data.display?.site === siteId) {\n if (data.display?.overline) {\n props.overline = data.display.overline;\n } else if (data.display?.category) {\n props.overline = data.display.category;\n }\n\n // Display the Site name as an overline when entry is from a different site\n } else if (data.display?.siteOverline) {\n props.overline = data.display.siteOverline;\n } else if (data.display?.category) {\n props.overline = data.display.category;\n }\n\n if (data.display?.thumbnail?.src) {\n props.image = data.display.thumbnail;\n if (data.display.thumbnail.gravity) {\n props.image.gravity = data.display.thumbnail.gravity;\n }\n if (data.display.thumbnail.aspectRatio) {\n props.image.aspectRatio = data.display.thumbnail.aspectRatio;\n }\n }\n\n if (data.display?.date) {\n props.byline = {\n publicationDate: data.display.date,\n };\n }\n\n if (data.display?.byline) {\n if (\n data.display.byline[0]?.label &&\n (data.display.byline[0].label.toLowerCase().startsWith(\"by\") ||\n data.display.byline[0].label.toLowerCase().startsWith(\"re\"))\n ) {\n // temporary add for supporting legacy byline data (legacy loader now in modern ES setup)\n const legacyByline = stripHtml(data.display.byline[0].label);\n\n let people = legacyByline;\n let authors = legacyByline;\n\n if (authors.startsWith(\"by \") || authors.startsWith(\"By \")) {\n authors = authors.substring(3);\n }\n\n if (authors.startsWith(\"by: \") || authors.startsWith(\"By: \")) {\n authors = authors.substring(4);\n }\n\n if (people.startsWith(\"re \") || people.startsWith(\"Re \")) {\n people = people.substring(3);\n }\n\n if (people.startsWith(\"re: \") || people.startsWith(\"Re: \")) {\n people = people.substring(4);\n\n if (people.indexOf(\", \") > 0) {\n let peopleCleanup = \"\";\n\n people.split(\", \").forEach((person) => {\n if (person.indexOf(\"@\") > 0) return; // skip email addresses\n peopleCleanup = peopleCleanup\n ? peopleCleanup + \", \" + person\n : person;\n });\n\n people = peopleCleanup;\n }\n }\n\n if (props.byline) {\n if (authors !== legacyByline) {\n props.byline.authors = [{ name: authors }];\n props.byline.type = \"ShowAll\";\n }\n if (people !== legacyByline) {\n props.byline.featuredAuthors = [{ name: people }];\n props.byline.type = \"ShowAll\";\n }\n } else {\n if (authors !== legacyByline) {\n props.byline = { authors: [{ name: authors }], type: \"ShowAll\" };\n }\n if (people !== legacyByline) {\n props.byline = {\n featuredAuthors: [{ name: people }],\n type: \"ShowAll\",\n };\n }\n }\n } else {\n const byline: Array<BylineAuthor> = [];\n const hightlight = data.highlight;\n\n data.display.byline.forEach((author) => {\n if (author.label) {\n let label = author.label;\n if (\n hightlight?.[\"author.text\"] &&\n Array.isArray(hightlight?.[\"author.text\"]) &&\n hightlight?.[\"author.text\"][0]\n ) {\n const authorFirstHighlight = hightlight?.[\"author.text\"][0]\n ? hightlight?.[\"author.text\"][0]\n .replaceAll(\"<mark>\", \"\")\n .replaceAll(\"</mark>\", \"\")\n : \"\";\n if (\n hightlight?.[\"author.text\"][0] &&\n authorFirstHighlight === label\n ) {\n label = hightlight?.[\"author.text\"][0];\n }\n }\n byline.push({ name: label, link: author.link });\n }\n });\n\n if (data.subset?.includes(\"artwork\")) {\n props.byline = { authors: byline, type: \"ShowAll\" };\n } else if (props.byline) {\n props.byline.authors = byline;\n } else {\n props.byline = { authors: byline };\n }\n }\n\n if (data.display.downloadLink) {\n props.downloadLink = data.display.downloadLink;\n }\n if (data.display.caseHead) {\n props.display = {\n caseHead: data.display.caseHead,\n caseCategory: data.display.caseCategory,\n };\n }\n }\n } else {\n // TODO: Add category url support to modern search schema\n if (data.source) {\n props.overline = { label: data.source /*, link: data.sourceUrl */ };\n } else if (data.contentType) {\n props.overline = {\n label: data.contentType /*, link: data.contentTypeUrl */,\n };\n }\n }\n\n if (data.subset?.includes(\"artwork\")) {\n props.variant = \"artwork\";\n }\n\n if (\n data.subset?.includes(\"participantStory\") ||\n data.subset?.includes(\"profilePages\")\n ) {\n props.variant = \"profile\";\n }\n\n return props;\n}\n","const remove = [/<[^>]*>?/gm, /\\u00AD/g, \"<\", \">\"] as const;\n\nconst replace = [[\""\", '\"', \"'\", \"'\", \"&\", \"&\"]] as const;\n\nexport function stripHtml(html: string): string {\n let result = html;\n\n // Protect the mark tags returned from highlighted search results\n result = result\n .replaceAll(\"<mark>\", \"[mark]\")\n .replaceAll(\"</mark>\", \"[/mark]\");\n\n for (const rm of remove) {\n result = result.replaceAll(rm, \"\");\n }\n for (const [key, value] of replace) {\n result = result.replaceAll(key, value);\n }\n\n // Return the mark tags to original state\n result = result\n .replaceAll(\"[mark]\", \"<mark>\")\n .replaceAll(\"[/mark]\", \"</mark>\");\n\n return result;\n}\n"],"names":["isSearchHitType","hitType","searchHit","undefined","contentType","createContentfulComponent","Component","entry","ref","options","getEntry","createEditAttributes","useContentful","fields","metadata","id","searchApiUrl","createSearchParams","search","query","from","toString","size","index","facets","join","filters","sort","facetLimit","useSearch","result","dedupe","fetchProps","url","params","useFetch","data","hits","useMultiSearch","method","headers","body","JSON","stringify","queries","map","s","forEach","i","dedupeSearchData","deduped","defaultSize","hit","some","item","HBSTitle","push","length","createUseSearchProps","createContentfulProps","parseInt","limit","sortValue","createSearchArticleTease","siteId","thumbnailProps","createModernSearchArticleTease","createLegacySearchArticleTease","props","type","title","link","HBSLink","tease","HBSDescription","byline","publicationDate","HBSPubDate","HBSSource","overline","label","HBSByline","people","authors","startsWith","substring","indexOf","peopleCleanup","split","person","name","featuredAuthors","HBSThumbnail","image","src","description","subset","includes","highlight","Array","isArray","cleanSearchHightlight","text","replaceAll","trim","stripHtml","display","site","category","siteOverline","thumbnail","gravity","aspectRatio","date","toLowerCase","legacyByline","hightlight","author","authorFirstHighlight","downloadLink","caseHead","caseCategory","source","variant","remove","replace","html","rm","key","value"],"sourceRoot":"","ignoreList":[]}