5dd4999b64
Strategized with @balazsorban44 to open one larger PR, with changes to individual examples as separate commits. For each example, I researched how multiple realworld codebases use the featured technology with TypeScript, to thoughtfully convert them by hand - nothing automated whatsoever. ## Documentation / Examples - [X] Make sure the linting passes by running `pnpm lint` - [X] The "examples guidelines" are followed from [our contributing doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md)
31 lines
716 B
TypeScript
31 lines
716 B
TypeScript
import IORedis, { Redis } from 'ioredis'
|
|
|
|
function fixUrl(url: string) {
|
|
if (!url) {
|
|
return ''
|
|
}
|
|
if (url.startsWith('redis://') && !url.startsWith('redis://:')) {
|
|
return url.replace('redis://', 'redis://:')
|
|
}
|
|
if (url.startsWith('rediss://') && !url.startsWith('rediss://:')) {
|
|
return url.replace('rediss://', 'rediss://:')
|
|
}
|
|
return url
|
|
}
|
|
|
|
class ClientRedis {
|
|
static instance: Redis
|
|
|
|
constructor() {
|
|
throw new Error('Use Singleton.getInstance()')
|
|
}
|
|
|
|
static getInstance(): Redis | null {
|
|
if (!ClientRedis.instance) {
|
|
ClientRedis.instance = new IORedis(fixUrl(process.env.REDIS_URL!))
|
|
}
|
|
return ClientRedis.instance
|
|
}
|
|
}
|
|
|
|
export default ClientRedis.getInstance()
|