Overhaul 2 0 - #3
Merged
Merged
Conversation
- BREAKING: search() returns clean { offers, lowestPrices } with resolved
merchant/edition/region names instead of the raw API shape
- Fix search by transforming the price_history_api response (build was broken)
- Migrate linting/formatting from ESLint+Prettier to Biome (npm run check)
- Cache catalog in os.tmpdir (not the package dir), only cache successful
responses, dedupe concurrent downloads, memoize the fuzzy index
- Behavioural test suite; stop emitting tests into dist
- Update README output example, add CLAUDE.md and 2.0.0 CHANGELOG entry
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
2.0.0
Breaking changes
search()now returns a clean, denormalised structure:{ offers, lowestPrices }.Each offer already has its
merchant,editionandregionresolved to areadable name (instead of numeric ids), plus
currentPrice,minDiscountPrice,couponCodeandlastUpdate.lowestPrices.officialandlowestPrices.keyshopsexpose the cheapest official-store and key-reseller price (either may be
null). Closes Search is not working #2This replaces the previous
{ success, offers, merchants, editions, regions }shape.Fixes
price_history_apiendpoint,as the old
admin-ajaxoffers endpoint had stopped returning data.so it keeps working when installed as a read-only dependency.
written to disk and read back as valid for a day).
Improvements
handling and the error/empty paths.
dist.Tooling
@types/node26, …).tsconfigfor TypeScript 6.0:moduleResolution: nodenextand anexplicit
typesfield (TS 6.0 no longer auto-includes@types/*).npm run check).