diff --git a/packages/cli/src/commands/add.ts b/packages/cli/src/commands/add.ts index 77cfba770..79d138b63 100644 --- a/packages/cli/src/commands/add.ts +++ b/packages/cli/src/commands/add.ts @@ -248,7 +248,7 @@ export default defineCommand({ let items: Awaited>; try { - items = await resolveItemsByTag(args.name, { baseUrl: config.registry }); + items = await resolveItemsByTag(args.name, { baseUrl: config.registry, skipCache: true }); } catch { items = []; } diff --git a/packages/cli/src/registry/remote.ts b/packages/cli/src/registry/remote.ts index 16a5f5fbd..b7cd0bab7 100644 --- a/packages/cli/src/registry/remote.ts +++ b/packages/cli/src/registry/remote.ts @@ -84,10 +84,13 @@ async function fetchJson(url: string): Promise { */ export async function fetchRegistryManifest( baseUrl: string = DEFAULT_REGISTRY_URL, + options?: { skipCache?: boolean }, ): Promise { const cacheFile = cachePath(baseUrl, "registry"); - const cached = readCache(cacheFile); - if (cached) return cached; + if (!options?.skipCache) { + const cached = readCache(cacheFile); + if (cached) return cached; + } try { const manifest = await fetchJson(`${baseUrl}/registry.json`); diff --git a/packages/cli/src/registry/resolver.ts b/packages/cli/src/registry/resolver.ts index 7789f0b92..eb2f8fb3f 100644 --- a/packages/cli/src/registry/resolver.ts +++ b/packages/cli/src/registry/resolver.ts @@ -9,6 +9,8 @@ import { fetchItemManifest, fetchRegistryManifest, DEFAULT_REGISTRY_URL } from " export interface ResolveOptions { baseUrl?: string; + /** Bypass the 24h manifest cache and fetch fresh data from the registry. */ + skipCache?: boolean; /** * Called once per item that fails to load inside `loadAllItems`. Defaults * to writing a diagnostic line to stderr. Pass a quieter implementation @@ -30,7 +32,7 @@ export async function listRegistryItems( options: ResolveOptions = {}, ): Promise { const baseUrl = options.baseUrl ?? DEFAULT_REGISTRY_URL; - const manifest = await fetchRegistryManifest(baseUrl); + const manifest = await fetchRegistryManifest(baseUrl, { skipCache: options.skipCache }); if (!manifest) return []; if (!filter?.type) return manifest.items; return manifest.items.filter((item) => item.type === filter.type);