Skip to content

Reusable Strategies

No Cache Strategy

import type { QueryStrategy, RequestInit } from "@/modules/goget"
export class NoCacheStrategy implements QueryStrategy {
alterInit(init: RequestInit): RequestInit {
const _init = structuredClone(init)
_init.cache = "no-store"
return _init
}
}

Force Cache

import type { QueryStrategy, RequestInit } from "@/modules/goget"
export class ForceCacheStrategy extends QueryStrategy {
alterInit(init: RequestInit): RequestInit {
_init.cache = "force-cache"
return _init
}
}

Next.js Tag Strategy

import { isEmpty } from 'radash'
import type { QueryStrategy, RequestInit } from "@/modules/goget"
export class TagStrategy implements QueryStrategy {
constructor(private tags?: string[]) { }
alterInit(init: RequestInit): RequestInit {
const _init = structuredClone(init)
if (!isEmpty(this.tags)) {
_init.next = { tags: this.tags }
}
return _init
}
}

Next.js Time-based Strategy

Requires TagStrategy.

import { set } from 'radash'
import type { QueryStrategy, RequestInit } from "@/modules/goget"
type Revalidate = number
export class TimeBasedStrategy extends TagStrategy {
constructor(private time: Revalidate, tags?: string[]) {
super(tags)
}
override buildInit(init: RequestInit): RequestInit {
const _init = super.buildInit(init)
return set(_init, "next.revalidate", this.time)
}
}