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) }}