Skip to content

Commit

Permalink
feat: new api route to clear all entries of specific base (#80)
Browse files Browse the repository at this point in the history
  • Loading branch information
farnabaz committed Apr 18, 2024
1 parent e58a789 commit 427f46f
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/runtime/server/api/_hub/cache/batch-delete.post.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ export default eventHandler(async (event) => {
}).parse)

const storage = useStorage('cache:nitro')
// delete with batch of 10 keys
// delete with batch of 25 keys
do {
const keysToDelete = keys.splice(0, 10)
const keysToDelete = keys.splice(0, 25)
await Promise.all(keysToDelete.map(storage.removeItem))
} while (keys.length)

Expand Down
28 changes: 28 additions & 0 deletions src/runtime/server/api/_hub/cache/clear/[...base].delete.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { eventHandler, sendNoContent, getRouterParam, createError } from 'h3'
import { requireNuxtHubAuthorization } from '../../../../utils/auth'
import { requireNuxtHubFeature } from '../../../../utils/features'
// @ts-expect-error useStorage not yet typed
import { useStorage } from '#imports'

export default eventHandler(async (event) => {
await requireNuxtHubAuthorization(event)
requireNuxtHubFeature('cache')

const base = getRouterParam(event, 'base') || ''
if (/\.([a-z0-9]+)$/i.test(base)) {
throw createError({
statusCode: 400,
message: 'Invalid base'
})
}

const storage = useStorage(`cache:nitro:${base}`)
const keys = await storage.getKeys()
// delete with batch of 25 keys
do {
const keysToDelete = keys.splice(0, 25)
await Promise.all(keysToDelete.map(storage.removeItem))
} while (keys.length)

return sendNoContent(event)
})
8 changes: 8 additions & 0 deletions src/runtime/server/api/_hub/cache/clear/[...base].options.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { eventHandler, sendNoContent } from 'h3'
import { requireNuxtHubAuthorization } from '../../../../utils/auth'

export default eventHandler(async (event) => {
// only handles CORS for Nuxt DevTools
await requireNuxtHubAuthorization(event)
return sendNoContent(event)
})
6 changes: 6 additions & 0 deletions src/runtime/server/utils/cache.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,12 @@ export function proxyHubCache(projectUrl: string, secretKey?: string) {
})
return
},
async clear(base: string) {
await cacheAPI(`/clear/${base}`, {
method: 'DELETE'
})
return
},
async batchDel(keys: string[]) {
await cacheAPI('/batch-delete', {
method: 'POST',
Expand Down

0 comments on commit 427f46f

Please sign in to comment.