algoliasearch-client-javascript icon indicating copy to clipboard operation
algoliasearch-client-javascript copied to clipboard

[bug]: TS recursivity error in SearchResponse

Open ChrisRast opened this issue 1 year ago • 0 comments

Description

We encountered the issue Type instantiation is excessively deep and possibly infinite.ts(2589) while upgrading algoliasearch from v5.1 to v5.15 and working with Immer produce function and SearchResponse type.

Here's a reproducible example of the issue:

The issue stems from two types: highlightResult and snippetResult(which both have the same structure). They create a recursive reference in the Yaml definition here where highlightResultMap and highlightResultArray both reference the same highlightResult.

highlightResultArray:
  type: array
  description: Surround words that match the query with HTML tags for highlighting.
  items:
    $ref: '#/highlightResult'

highlightResultMap:
  type: object
  description: Surround words that match the query with HTML tags for highlighting.
  additionalProperties:
    x-additionalPropertiesName: attribute
    $ref: '#/highlightResult'

highlightResult:
  oneOf:
    - $ref: '#/highlightResultOption'
    - $ref: '#/highlightResultMap'
    - $ref: '#/highlightResultArray'

This type actually changed in the previous commits and did not create any issue in v5.1.0. Last working version is 5.3.2.

We see two possible fixes:

  1. Create a new highlightResultLevelTwo that won't reference highlightResultMap or highlightResultArray and breaks the cycle.
  2. Patch the TS definitions to prevent a excessively deep recursion. TS Playground with a modified type HighlightResult as generic

Thanks!

Client

Search

Version

5.15.0

Relevant log output

No response

ChrisRast avatar Nov 29 '24 15:11 ChrisRast