[{"data":1,"prerenderedAt":295},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-quality-assurance":75,"-getting-started-quality-assurance-surround":290},[4,30],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,14,18,22,26],{"title":11,"path":12,"stem":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F2.introduction",{"title":15,"path":16,"stem":17},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F3.installation",{"title":19,"path":20,"stem":21},"Use Cases","\u002Fgetting-started\u002Fuse-cases","1.getting-started\u002F4.use-cases",{"title":23,"path":24,"stem":25},"Quality Assurance","\u002Fgetting-started\u002Fquality-assurance","1.getting-started\u002F5.quality-assurance",{"title":27,"path":28,"stem":29},"Migration from v1","\u002Fgetting-started\u002Fmigration","1.getting-started\u002F6.migration",{"title":31,"path":32,"stem":33,"children":34,"page":6},"Api Reference","\u002Fapi-reference","2.api-reference",[35,39,43,47,51,55,59,63,67,71],{"title":36,"path":37,"stem":38},"API Reference","\u002Fapi-reference\u002Foverview","2.api-reference\u002F1.overview",{"title":40,"path":41,"stem":42},"Infos & Options","\u002Fapi-reference\u002Finfos-options","2.api-reference\u002F10.infos-options",{"title":44,"path":45,"stem":46},"Search Module","\u002Fapi-reference\u002Fsearch","2.api-reference\u002F2.search",{"title":48,"path":49,"stem":50},"User Module","\u002Fapi-reference\u002Fuser","2.api-reference\u002F3.user",{"title":52,"path":53,"stem":54},"Album Module","\u002Fapi-reference\u002Falbum","2.api-reference\u002F4.album",{"title":56,"path":57,"stem":58},"Artist Module","\u002Fapi-reference\u002Fartist","2.api-reference\u002F5.artist",{"title":60,"path":61,"stem":62},"Playlist Module","\u002Fapi-reference\u002Fplaylist-track","2.api-reference\u002F6.playlist-track",{"title":64,"path":65,"stem":66},"Charts Module","\u002Fapi-reference\u002Fcharts-editorial","2.api-reference\u002F7.charts-editorial",{"title":68,"path":69,"stem":70},"Genre Module","\u002Fapi-reference\u002Fgenre-radio","2.api-reference\u002F8.genre-radio",{"title":72,"path":73,"stem":74},"Podcast Module","\u002Fapi-reference\u002Fpodcast-episode-comment","2.api-reference\u002F9.podcast-episode-comment",{"id":76,"title":23,"body":77,"description":283,"extension":284,"links":285,"meta":286,"navigation":287,"path":24,"seo":288,"stem":25,"__hash__":289},"docs\u002F1.getting-started\u002F5.quality-assurance.md",{"type":78,"value":79,"toc":269},"minimark",[80,84,89,94,105,128,132,140,148,152,159,175,178,182,185,200,204,211,218,222,225,251,255],[81,82,83],"p",{},"Stability and reliability are core pillars of this library. To ensure a \"Rolls-Royce\" developer experience, we employ a multi-layered testing strategy that covers everything from internal logic to live API responses.",[85,86,88],"h2",{"id":87},"testing-layers","Testing Layers",[90,91,93],"h3",{"id":92},"_1-unit-testing","1. Unit Testing",[81,95,96,97,104],{},"We use ",[98,99,103],"a",{"href":100,"rel":101},"https:\u002F\u002Fvitest.dev\u002F",[102],"nofollow","Vitest"," to test the internal logic of the library in isolation. This includes:",[106,107,108,116,122],"ul",{},[109,110,111,115],"li",{},[112,113,114],"strong",{},"Throttling Logic",": Verifying that the client correctly queues requests to stay within the 50 req \u002F 5s limit.",[109,117,118,121],{},[112,119,120],{},"Error Handling",": Ensuring that various API error codes (404, rate limits, schema errors) are mapped to the correct TypeScript exceptions.",[109,123,124,127],{},[112,125,126],{},"Search Builder",": Testing every permutation of the fluent builder to ensure it produces valid query strings.",[90,129,131],{"id":130},"_2-type-level-testing","2. Type-Level Testing",[81,133,134,135,139],{},"Our API response types aren't just documentation; they are strictly enforced. We use ",[136,137,138],"code",{},"vitest --typecheck"," to ensure that:",[106,141,142,145],{},[109,143,144],{},"Method signatures always match the expected input.",[109,146,147],{},"The data returned by the client exactly satisfies the TypeScript interfaces defined in our core types.",[90,149,151],{"id":150},"_3-runtime-validation-live-snapshots","3. Runtime Validation (Live Snapshots)",[81,153,154,155,158],{},"One of the unique features of this library is its ",[112,156,157],{},"Live Snapshot Testing",". We maintain a test suite that:",[160,161,162,169,172],"ol",{},[109,163,164,165,168],{},"Calls the ",[112,166,167],{},"actual Deezer API",".",[109,170,171],{},"Extracts the \"shape\" of the response.",[109,173,174],{},"Compares that shape against a stored snapshot.",[81,176,177],{},"If Deezer updates their API (adding or removing fields), our tests will fail immediately, alerting the maintainers that a type update is required.",[90,179,181],{"id":180},"_4-automated-documentation-sync","4. Automated Documentation Sync",[81,183,184],{},"To prevent documentation from becoming \"stale,\" we use a custom synchronization script. This ensures that:",[106,186,187,194],{},[109,188,189,190,193],{},"The ",[112,191,192],{},"Schemas"," shown in the documentation are pulled directly from the actual TypeScript interfaces.",[109,195,189,196,199],{},[112,197,198],{},"Example Responses"," are real-world data fetched from the live API.",[85,201,203],{"id":202},"code-coverage","Code Coverage",[81,205,206,207,210],{},"We maintain a strict ",[112,208,209],{},"100% Code Coverage"," policy for all core logic. Every logical branch, fallback, and error handler is verified by at least one test case.",[81,212,213],{},[214,215],"img",{"alt":216,"src":217},"Coverage","..\u002F..\u002Fbadges\u002Fcoverage.svg",[85,219,221],{"id":220},"continuous-integration-ci","Continuous Integration (CI)",[81,223,224],{},"Every pull request and commit undergoes a rigorous automated pipeline:",[106,226,227,233,239,245],{},[109,228,229,232],{},[112,230,231],{},"Linting",": Ensuring consistent code style and best practices.",[109,234,235,238],{},[112,236,237],{},"Build",": Verifying that the dual ESM\u002FCJS build completes without errors.",[109,240,241,244],{},[112,242,243],{},"Tests",": Running the full unit and type-test suite.",[109,246,247,250],{},[112,248,249],{},"Audit",": Scanning for security vulnerabilities in dependencies.",[85,252,254],{"id":253},"supply-chain-security","Supply Chain Security",[106,256,257,263],{},[109,258,259,262],{},[112,260,261],{},"Zero Runtime Dependencies",": The package has 0 external dependencies at runtime, eliminating risk from nested package vulnerabilities.",[109,264,265,268],{},[112,266,267],{},"Provenance",": Published versions are cryptographically linked to the GitHub source code repository using npm provenance.",{"title":270,"searchDepth":271,"depth":271,"links":272},"",2,[273,280,281,282],{"id":87,"depth":271,"text":88,"children":274},[275,277,278,279],{"id":92,"depth":276,"text":93},3,{"id":130,"depth":276,"text":131},{"id":150,"depth":276,"text":151},{"id":180,"depth":276,"text":181},{"id":202,"depth":271,"text":203},{"id":220,"depth":271,"text":221},{"id":253,"depth":271,"text":254},"Learn about the testing strategies and stability guarantees of the Deezer Public API library.","md",null,{},true,{"title":23,"description":283},"3dSwySRWSFlqfwaKMxwI-fEK90pNbQKS-3yhtsNLheY",[291,293],{"title":19,"path":20,"stem":21,"description":292,"children":-1},"Discover how developers are using the Deezer Public API library in real-world projects.",{"title":27,"path":28,"stem":29,"description":294,"children":-1},"Version 2 introduces significant breaking changes to align with modern JavaScript and TypeScript standards.",1775131276025]