algolia / algolia/algoliasearch-client-javascript

[bug]: TS recursivity error in SearchResponse

Aperta
#1,571 0 commenti 7 reazioni 0 assegnatari Vedi su GitHub
bug
Lingua principale
TypeScript
Stelle
1.4k
Fork
226
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

### 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:
- [TS Playground](https://www.typescriptlang.org/play/?ts=5.6.3#code/FASwtgDg9gTgLgAgN7AQgrgZwKYCVsAm6AxtjADSoJwCeE2C+RpMwAvggGYxRgIDkMbAENicfsFCRYiJAgg9mDDt14DwYMhOC16CABIgA5gAsANsZNx8mdGbgB5CHBBQAdggC8yKgDdhZujYAFwImHAwIG5GANzscTp0DIamFqbW2Lb2XgaWaVY2do7Orh4APj5oANoA1tg0oeGR0QC6oSnmlhlZcHEcFQCCMDDCNAA8HfndRQB8CbrJIHBjACo5+MSwBGNNUUbkGG41blAA7m4zMzlrAGSVCAD6JnldhfYA-KEoaNV1DWERPZtXKpV6ZIpxNBsPrzJIIADKIhgxBMhjgmFW62wmxg2120QO6COJ3OlyxOLxgIJCGEbhoVzu3wQz3R7SWqxmVRaMMkCwQAzMRigFmEiOEyJMNmgbhwmO8Gy2Oyp+0OxzOFyu3jFErRGJWc15cIGEAg8LgwjgDG8TIARrSagB1SIuaKYN6shAACgFQpF2pRUvcsoAQvanUs9gzkPJhEYohbSqEAAqx+MudwINgASgQFTcdjM7ENegGYlKXioFSZaDtR3DLqMbvB9kwoR9wpAoqRAcy0pDYedkdzhwI2E4UUIVDQC1C-AAwvoBgA5ADiAFEHrg1-CAKoAGRW8IkUOLDBTcbcCYz1qoxHQw2wbjg55CCHzYBtZCobmwAA9n7Gr7vp+MDDvmZiFmg9AwC+oTAV+UFCL4rhYLBb7oB+ZBgQWVBwFA5pmHOUBEnAcEYSBuH4QEL6tuhmGsGwp4IKGdaDtEORMiABCNMqVDoBABAWoQAykQgAAiQlFsAmwyogUQRgEZpCRxVC1o6bGNu6tHgWYlAcJgCaYOOmT8iaSmWpIMnhDGF5Xh4N5oHeD5PmhACMlBoD+-5oQATB58hkG5-kKNgyHEZgaEAAz+XhBFESRoR+ZRBE0YlelhIZxmYAg55pqUllBogQhKDAoRMCQZBjMaprmpaBylumFw5AoUBKJ6noECMnBwAcoiNTmnhXEymCnEsKJen1pQAHQLDm1YIMQwg4AIC7Luum7bvuh78MEU4-CAnATWW7hTWp9Z7E2PSYHNe0-AgnXCN1p0DhGrpaRxCBTV9k0nWdGmXUUmAHBAqaXo1ma3ZmCDYGYy3zXdD1PX9r2ac26I5DpkOMQjY7CEUu13TWQjCDUVCMdmkjSYVCBVOEQkHAQICYCDcAoi0ORYHghAVTAnrFTzBzyS4im1dgWZAA)

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](https://github.com/algolia/api-clients-automation/blob/065b093aede93566b5c36d35d1eee2b3edb7639d/specs/common/schemas/HighlightResult.yml#L50) where `highlightResultMap` and `highlightResultArray` both reference the same `highlightResult`.

```yml
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](https://www.typescriptlang.org/play/?ts=5.6.3#code/FASwtgDg9gTgLgAgN7AQgrgZwKYCVsAm6AxtjADSoJwCeE2C+RpMwAvggGYxRgIDkMbAENicfsFCRYiJAgg9mDDt14DwYMhOC16CABIgA5gAsANsZNx8mdGbgB5CHBBQAdggC8yKgDdhZujYAFwImHAwIG5GANzscTp0DABC6CBmBAAq6BBm2AA8AHII2AAecNhuBJgIbuhgAEZk5AiZJeWV1QjCbjQA2gC6XgiDAHzDmX38edFwJvxDZRVVNYVUAPytVKGp6Vk5eUUtfQB0Z5ktPTQDowm6DADK6A0RonD5AILty111jc0IZLfTo1P5NGDjby7DLZXIFD7jJYgkZnE7Q-Zw-LJUYtVFRThkRjYcIDDZE8JTGZGOYLba1bC+Mh3JIGSwWUzWYl2d4AEWwzhMwJWtXq4OGAGZIQg+QKhV0AAwITaGUzsqw2blOFzuBChFXmSyc2z2LWuDwAHx8aD6AGtsDRQuFItEBnq2YaNfZ8k8XjA3vkZXMWgBGUa3dgIS0fGB+mj5fVqo3c73PV5iAP8oMIUNh5l6QzvNrefDEWAEfJOqJGFroNw2txQADubjDEwQADIrQgAPomd0cz1wdahFBoa12h1hCJV12s1Uern2OJoNhxVeSe4IB4iGDEEwFzD5ItE0swcuV6I1usN5ut4vYU-n6eX7q9cad0cIPtwTBuwujQY1zzBgPjMIwoAsYRt2EXcTBsaA3BwI9hhLMsK2fasMGvJsWylaDYIPI9w0SPQPggCAHjgYQKmGT8Gh6G0AHVIhcaJMEHX8EAAClA8DIPwvd4PcJDkgY5iQFYox32QeRhCMKJqLNUIAAU5IU7UPDYABKSMRTMMx2A3FkPjEM0vCoS1PzQei63EyT2MXH9Ql4iCQCgndBOJBCRLEliq3GS1awIbBOCiQgqDQe5Qn4ABhfQPkKABxABRbtcGSh4AFUABlMgeCQVyMvRVPktxFJ1bxP2IdAY0qOASpCEV-lYNA3CWBrQjBQlLTqfSqHoGAOqa8F+qEXxXCwIaupgXTeoMyKoCoswYqgWs4E60UyCoOBFoCBrOOmwySJSXyJKrWiqBAAhHQwqgcgIajCA+dbpUeo7S0QxAojOgJKMei7rNO+yOI2-TKA4TBFMwULiQQMiKKoipJA+8JZNK8qPEqqhqtqtx6rkxrg0oVr2oJ0IACZifkMghqJ0aGQmzAhvlKmdqWla1op1ndrMfauYjSGXGhkBYZK9SzWR4TECEJQYFCJgSDIT5yL+ioWhMjSpQUKAlC4riCD9Tg4EuUz3B0zxxk-TBGwkvduLeM0TnuHSrIQYhhBwAQ4oSlK0oynK8v4YIIrHEBOHt023BOGymL8tiOJdkOxwQA3hCN6OgarBzjR-WiEFRB33Az2y46MbPuUwFoIDUsqNIQNgk-rkozE913k9T9OY7srOOOGObG4b9uQuEblg+T6yhGEG0qAb7TJGAFHED6cJHpaAgQEwau4D3IZvCwPBCEVmAuJlo+Wm+lxfsR7AtKAA)

Thanks!

### Client

Search

### Version

5.15.0

### Relevant log output

_No response_

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Direzione di ricerca

Riproduci l’errore di TypeScript 5.6.3 usando il TS Playground collegato e analizza le definizioni generate di SearchResponse, highlightResult e snippetResult insieme a specs/common/schemas/HighlightResult.yml. Traccia i riferimenti ricorsivi in highlightResultMap e highlightResultArray, quindi confrontali con il tipo v5.3.2 che funzionava per ultimo; il lavoro è completato quando le definizioni v5.15 vengono compilate senza TS2589 preservando la struttura della risposta.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
typescript
Ambito
api
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
45/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.