algolia / algolia/algoliasearch-client-javascript
[bug]: TS recursivity error in SearchResponse
- 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