DX-2445: Add new search client packages#1422
Merged
Conversation
Copy the ioredis search client from search-clients repo into the monorepo as packages/search-ioredis. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copy the node-redis search client from search-clients repo into the monorepo as packages/search-redis. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
## package.json changes - search-ioredis, search-redis: Move `@upstash/redis` from `dependencies` to `peerDependencies` with `workspace:*` - search-ioredis, search-redis: Simplify test script to `vitest run` (removed `node --env-file=.env` prefix — env vars are injected by CI) ## tsconfig changes - search-ioredis, search-redis: Extend `../../tsconfig.base.json` - Override `noEmit: false` (base sets `noEmit: true` because the redis package uses tsup; search packages use plain tsc and need emit) - Override `allowImportingTsExtensions: false` (required when emitting) - Add `paths` mapping `@upstash/redis` → `../redis/dist/nodejs.d.ts` so tsc resolves types from the built redis output without needing to modify the redis package.json entry points ## Workflow changes - canary.yml: Add search-ioredis and search-redis as package options. Extract package→directory mapping into a reusable `resolve` step using a `case` statement instead of if/else - npm-publish.yml: Accept `packages` JSON array instead of single `version` string. Use `fromJson()` matrix strategy with dynamic package directory resolution (follows the box-sdk pattern) - router.yml: Pass full `packages` array from release metadata to npm-publish instead of extracting a single version. Supports multi-package releases from changesets Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The redis package entry points (main: ./nodejs.js) are relative to the dist directory, so it must be published from packages/redis/dist. Add publish_dir output to the parse step and use working-directory with npm publish instead of pnpm --filter. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add vitest.config.mts with resolve alias pointing @upstash/redis to ../redis/dist/nodejs.mjs, fixing "Cannot find module" errors caused by the redis package's entry points being relative to its dist/ directory - Load root .env via dotenv in vitest configs so env vars like REDIS_URL are available in process.env at test runtime - Install dotenv as dev dependency Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Search packages need packages/redis/dist to exist for module resolution. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
buggyhunter
approved these changes
Mar 11, 2026
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.
package.json changes
@upstash/redisfromdependenciestopeerDependencieswithworkspace:*vitest run(removednode --env-file=.envprefix — env vars are injected by CI)tsconfig changes
../../tsconfig.base.jsonnoEmit: false(base setsnoEmit: truebecause the redis package uses tsup; search packages use plain tsc and need emit)allowImportingTsExtensions: false(required when emitting)pathsmapping@upstash/redis→../redis/dist/nodejs.d.tsso tsc resolves types from the built redis output without needing to modify the redis package.json entry pointsWorkflow changes
resolvestep using acasestatement instead of if/elsepackagesJSON array instead of singleversionstring. UsefromJson()matrix strategy with dynamic package directory resolution (follows the box-sdk pattern)packagesarray from release metadata to npm-publish instead of extracting a single version. Supports multi-package releases from changesetsCo-Authored-By: Claude Opus 4.6 noreply@anthropic.com