From 60e95b1634ef99aa6f9fe11b8f9efd8d1507f722 Mon Sep 17 00:00:00 2001 From: zipg Date: Fri, 14 Aug 2026 17:47:35 +0800 Subject: [PATCH] fix(docs): list all native offline drivers --- docs/lib/agentRegistry.test.ts | 51 ++++++++++++++++++++++++---------- docs/lib/agentRegistry.ts | 30 +++++++++++--------- 2 files changed, 54 insertions(+), 27 deletions(-) diff --git a/docs/lib/agentRegistry.test.ts b/docs/lib/agentRegistry.test.ts index 101209325b..4d27199276 100644 --- a/docs/lib/agentRegistry.test.ts +++ b/docs/lib/agentRegistry.test.ts @@ -151,13 +151,16 @@ test("DuckDB native tar.zst packages appear in the native catalog", () => { }, ]); - assert.deepEqual(entries.map(({ key, platformKey, filename }) => ({ key, platformKey, filename })), [ - { - key: "duckdb", - platformKey: "macos-aarch64", - filename: "dbx-agent-duckdb-0.1.0-macos-aarch64.tar.zst", - }, - ]); + assert.deepEqual( + entries.map(({ key, platformKey, filename }) => ({ key, platformKey, filename })), + [ + { + key: "duckdb", + platformKey: "macos-aarch64", + filename: "dbx-agent-duckdb-0.1.0-macos-aarch64.tar.zst", + }, + ], + ); }); test("RabbitMQ native tar.zst packages appear in the native catalog", () => { @@ -169,12 +172,32 @@ test("RabbitMQ native tar.zst packages appear in the native catalog", () => { }, ]); - assert.deepEqual(entries.map(({ key, platformKey, filename }) => ({ key, platformKey, filename })), [ - { - key: "rabbitmq", - platformKey: "windows-x64", - filename: "dbx-agent-rabbitmq-0.1.1-windows-x64.tar.zst", - }, - ]); + assert.deepEqual( + entries.map(({ key, platformKey, filename }) => ({ key, platformKey, filename })), + [ + { + key: "rabbitmq", + platformKey: "windows-x64", + filename: "dbx-agent-rabbitmq-0.1.1-windows-x64.tar.zst", + }, + ], + ); assert.equal(entries[0]?.label, "RabbitMQ"); }); + +test("all current native-only agent packages appear in the native catalog", () => { + const nativeKeys = ["cassandra", "duckdb", "hive", "iotdb", "kingbase", "neo4j", "oracle", "rabbitmq", "rocketmq", "tdengine", "vastbase", "xugu", "zookeeper"]; + const entries = buildNativeAgentEntries( + nativeKeys.map((key) => ({ + name: `dbx-agent-${key}-${driverVersions[key as keyof typeof driverVersions]}-macos-aarch64.tar.zst`, + browser_download_url: `https://example.com/dbx-agent-${key}-macos-aarch64.tar.zst`, + size: 4096, + })), + ); + + assert.deepEqual(entries.map(({ key }) => key).sort(), nativeKeys); + assert.equal(entries.find(({ key }) => key === "cassandra")?.label, "Apache Cassandra"); + assert.equal(entries.find(({ key }) => key === "hive")?.label, "Apache Hive"); + assert.equal(entries.find(({ key }) => key === "rocketmq")?.label, "Apache RocketMQ"); + assert.equal(entries.find(({ key }) => key === "zookeeper")?.label, "Apache ZooKeeper"); +}); diff --git a/docs/lib/agentRegistry.ts b/docs/lib/agentRegistry.ts index 76191b7963..3ccfbe9ae4 100644 --- a/docs/lib/agentRegistry.ts +++ b/docs/lib/agentRegistry.ts @@ -91,9 +91,6 @@ const GITHUB_RELEASE_DOWNLOAD_PREFIX = "https://github.com/t8y2/dbx/releases/dow const CNB_RELEASE_DOWNLOAD_PREFIX = "https://cnb.cool/dbxio.com/dbx/-/releases/download/"; const MIN_APP_VERSION = "0.6.0"; const driverVersionMap = driverVersions as Record; -const nativeDriverKeys = ["duckdb", "oracle", "kingbase", "xugu", "rabbitmq"] as const; -const nativeDriverKeySet = new Set(nativeDriverKeys); -const nativeDriverKeyPattern = nativeDriverKeys.join("|"); const platformLabels: Record = { "macos-aarch64": "macOS (Apple Silicon)", @@ -107,7 +104,7 @@ const platformLabels: Record = { const driverLabels: Record = { access: "Microsoft Access", bigquery: "BigQuery", - cassandra: "Cassandra", + cassandra: "Apache Cassandra", dameng: "Dameng", databend: "Databend", databricks: "Databricks", @@ -121,7 +118,7 @@ const driverLabels: Record = { goldendb: "GoldenDB", h2: "H2", highgo: "HighGo", - hive: "Hive", + hive: "Apache Hive", informix: "Informix", iotdb: "Apache IoTDB", iris: "InterSystems IRIS", @@ -132,6 +129,7 @@ const driverLabels: Record = { "oceanbase-oracle": "OceanBase Oracle Mode", oracle: "Oracle", rabbitmq: "RabbitMQ", + rocketmq: "Apache RocketMQ", saphana: "SAP HANA", snowflake: "Snowflake", sundb: "SunDB", @@ -143,11 +141,14 @@ const driverLabels: Record = { vertica: "Vertica", xugu: "虚谷 XuguDB", yashandb: "YashanDB", - zookeeper: "ZooKeeper", + zookeeper: "Apache ZooKeeper", }; const currentDriverKeys = Object.keys(driverVersionMap).sort((a, b) => labelForDriver(a).localeCompare(labelForDriver(b))); -const currentJavaDriverKeys = currentDriverKeys.filter((key) => !nativeDriverKeySet.has(key)); +const currentDriverKeyPattern = [...currentDriverKeys] + .sort((a, b) => b.length - a.length) + .map(escapeRegExp) + .join("|"); const jreVersions: Record = { "21": "21", @@ -157,6 +158,10 @@ function labelForDriver(key: string): string { return driverLabels[key] ?? key.replace(/-/g, " "); } +function escapeRegExp(value: string): string { + return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} + function assetInfo(asset: GitHubReleaseAsset): ArtifactInfo { return { url: asset.browser_download_url, @@ -281,7 +286,7 @@ export function buildJreEntries(assets: GitHubReleaseAsset[]): JreDisplayEntry[] export function buildDriverEntries(assets: GitHubReleaseAsset[]): DriverDisplayEntry[] { const byName = assetMap(assets); - return currentJavaDriverKeys + return currentDriverKeys .map((key) => { const version = driverVersionMap[key] ?? ""; const asset = byName.get(`dbx-agent-${key}-${version}.tar.zst`) ?? byName.get(`dbx-agent-${key}-${version}.zip`) ?? byName.get(`dbx-agent-${key}-${version}.jar`) ?? byName.get(`dbx-agent-${key}.jar`); @@ -303,7 +308,7 @@ function buildDriverEntriesFromRegistry(registry: AgentRegistry): DriverDisplayE return Object.entries(registry.drivers ?? {}) .map(([key, driver]) => { const jar = driver.jar; - if (nativeDriverKeySet.has(key) || !jar?.url || jar.size <= 0) return null; + if (!jar?.url || jar.size <= 0) return null; return { key, @@ -323,9 +328,9 @@ export function buildNativeAgentEntries(assets: GitHubReleaseAsset[]): NativeAge const platforms = "macos-aarch64|macos-x64|linux-aarch64|linux-x64|windows-aarch64|windows-x64"; for (const asset of assets) { - const packageMatch = new RegExp(`^dbx-agent-(${nativeDriverKeyPattern})-(.+)-(${platforms})\\.(?:tar\\.zst|zip)$`).exec(asset.name); - const versionedMatch = new RegExp(`^dbx-agent-(${nativeDriverKeyPattern})-(.+)-(${platforms})(?:\\.exe)?$`).exec(asset.name); - const legacyMatch = new RegExp(`^dbx-agent-(${nativeDriverKeyPattern})-(${platforms})(?:\\.exe)?$`).exec(asset.name); + const packageMatch = new RegExp(`^dbx-agent-(${currentDriverKeyPattern})-(.+)-(${platforms})\\.(?:tar\\.zst|zip)$`).exec(asset.name); + const versionedMatch = new RegExp(`^dbx-agent-(${currentDriverKeyPattern})-(.+)-(${platforms})(?:\\.exe)?$`).exec(asset.name); + const legacyMatch = new RegExp(`^dbx-agent-(${currentDriverKeyPattern})-(${platforms})(?:\\.exe)?$`).exec(asset.name); const match = packageMatch ?? versionedMatch ?? legacyMatch; if (!match) continue; @@ -333,7 +338,6 @@ export function buildNativeAgentEntries(assets: GitHubReleaseAsset[]): NativeAge const key = match[1]; const version = legacyMatch ? (driverVersionMap[key] ?? "") : match[2]; const platformKey = legacyMatch ? match[2] : match[3]; - if (!nativeDriverKeySet.has(key)) continue; const entryKey = `${key}:${platformKey}`; const existing = entries.get(entryKey); if (existing?.packaged && !packaged) continue;