From 7b8c1c3afe62467777820576743a6d681ee43dd4 Mon Sep 17 00:00:00 2001 From: hippietrail Date: Sun, 31 May 2026 19:02:57 +0800 Subject: [PATCH 1/3] feat: add current version numbers for firefox, js, rust, and vscode --- packages/web/src/lib/marketing/data.ts | 1 + packages/web/src/lib/marketing/versions.ts | 69 ++++++++++++++++++++++ packages/web/src/routes/+page.svelte | 16 ++++- packages/web/src/routes/get/+page.svelte | 34 ++++++++--- 4 files changed, 112 insertions(+), 8 deletions(-) create mode 100644 packages/web/src/lib/marketing/versions.ts diff --git a/packages/web/src/lib/marketing/data.ts b/packages/web/src/lib/marketing/data.ts index d7b0016d8..0ccd69c3d 100644 --- a/packages/web/src/lib/marketing/data.ts +++ b/packages/web/src/lib/marketing/data.ts @@ -17,6 +17,7 @@ export type Integration = { categoryLabel: string; tag?: string; platform?: string; + version?: string; cta: 'install' | 'docs'; color?: string; fg?: string; diff --git a/packages/web/src/lib/marketing/versions.ts b/packages/web/src/lib/marketing/versions.ts new file mode 100644 index 000000000..6aa0e339e --- /dev/null +++ b/packages/web/src/lib/marketing/versions.ts @@ -0,0 +1,69 @@ +import { writable } from 'svelte/store'; + +export const liveVersions = writable>({ + firefox: '', + js: '', + rust: '', + vscode: '', +}); + +export async function loadLiveVersions() { + // 4. Firefox Addon + try { + const ver = ( + await ( + await fetch( + 'https://addons.mozilla.org/api/v5/addons/addon/private-grammar-checker-harper/', + ) + ).json() + ).current_version.version; + liveVersions.update((v) => ({ ...v, firefox: ver })); + } catch {} + + // 2. JS Package + try { + const ver = (await (await fetch('https://registry.npmjs.org/harper.js')).json())['dist-tags'] + .latest; + liveVersions.update((v) => ({ ...v, js: ver })); + } catch {} + + // 1. Rust Crate + try { + const lines = (await (await fetch('https://index.crates.io/ha/rp/harper-core')).text()).split( + '\n', + ); + liveVersions.update((v) => ({ ...v, rust: JSON.parse(lines[lines.length - 2]).vers })); + } catch {} + + // 3. VS Code Extension + try { + const res = await fetch( + 'https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery', + { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Accept: 'application/json;api-version=3.0-preview.1', + }, + body: JSON.stringify({ + filters: [ + { + criteria: [ + { filterType: 8, value: 'Microsoft.VisualStudio.Code' }, + { filterType: 7, value: 'elijah-potter.harper' }, + ], + pageNumber: 1, + pageSize: 1, + sortBy: 0, + sortOrder: 0, + }, + ], + assetTypes: [], + flags: 194, + }), + }, + ); + const ver = (await res.json()).results[0].extensions[0].versions[0].version; + liveVersions.update((v) => ({ ...v, vscode: ver })); + } catch {} +} diff --git a/packages/web/src/routes/+page.svelte b/packages/web/src/routes/+page.svelte index 6ed79b9ef..867c3e60b 100644 --- a/packages/web/src/routes/+page.svelte +++ b/packages/web/src/routes/+page.svelte @@ -19,6 +19,7 @@ import PrivacySpeedCards from '$lib/marketing/PrivacySpeedCards.svelte'; import { featuredIntegrationIds, integrations, marketingLinks } from '$lib/marketing/data'; import { LazyEditor } from 'harper-editor'; import type { Linter } from 'harper.js'; +import { loadLiveVersions, liveVersions } from '$lib/marketing/versions'; import { onMount } from 'svelte'; import demoText from '../../../../demo.md?raw'; @@ -141,10 +142,17 @@ const faqs = [ }, ]; +let liveFxVer = ''; +let liveJsVer = ''; +let liveRustVer = ''; +let liveVscodeVer = ''; + onMount(() => { void (async () => { linter = await createEditorLinter(); })(); + + void loadLiveVersions(); }); @@ -247,7 +255,13 @@ onMount(() => { {integration.name} - {integration.desc} + + {integration.desc} + + {#if $liveVersions[integration.id]} + ({$liveVersions[integration.id]}) + {/if} + {/if} diff --git a/packages/web/src/routes/get/+page.svelte b/packages/web/src/routes/get/+page.svelte index 20c98b718..007ccb8e9 100644 --- a/packages/web/src/routes/get/+page.svelte +++ b/packages/web/src/routes/get/+page.svelte @@ -1,4 +1,5 @@