{"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, \"&lt;\", \"&gt;\"] as const;\n\nconst replace = [[\"&quot;\", '\"', \"&apos;\", \"'\", \"&amp;\", \"&\"]] 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":[]}