Skip to content

Commit 4fa894e

Browse files
Rename extension provider fields
1 parent 58654f4 commit 4fa894e

12 files changed

Lines changed: 98 additions & 25 deletions

File tree

src-tauri/src/commands/database/sidecar.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const DATABASE_SIDECAR_PROTOCOL_VERSION: u32 = 1;
1616

1717
#[derive(Debug, Deserialize)]
1818
struct ExtensionManifest {
19-
#[serde(rename = "databaseProviders", default)]
19+
#[serde(rename = "databases", alias = "databaseProviders", default)]
2020
database_providers: Vec<DatabaseProviderContribution>,
2121
}
2222

src/extensions/database/database-provider-extensions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,12 +143,12 @@ export function getDatabaseProviderExtensions(): ExtensionManifest[] {
143143
version: "1.0.0",
144144
publisher: "Athas",
145145
categories: ["Database"],
146-
databaseProviders: [provider],
146+
databases: [provider],
147147
activationEvents: [`onDatabase:${provider.id}`],
148148
license: "MIT",
149149
repository: {
150150
type: "git",
151-
url: "https://github.com/athasdev/extensions",
151+
url: "https://github.com/athasdev/athas/tree/master/extensions",
152152
},
153153
icon: "icon.svg",
154154
}),

src/extensions/icon-themes/builtin/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"iconThemes": [
2+
"icons": [
33
{
44
"id": "material",
55
"name": "Material Icons",

src/extensions/marketplace/marketplace-extensions.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
import type { ExtensionCategory, ExtensionManifest } from "../types/extension-manifest";
2+
import {
3+
getManifestDatabaseContributions,
4+
getManifestIconContributions,
5+
} from "../types/extension-contributions";
26

37
const CDN_BASE_URL = import.meta.env.VITE_PARSER_CDN_URL || "https://athas.dev/extensions";
48
const ATHAS_EXTENSIONS_CDN_PREFIX = "https://athas.dev/extensions";
@@ -45,14 +49,12 @@ function toExtensionCategories(rawCategories: string[] | undefined): ExtensionCa
4549

4650
function isContributionExtension(manifest: ExtensionManifest): boolean {
4751
return Boolean(
48-
manifest.databaseProviders?.length ||
49-
manifest.contributes?.databaseProviders?.length ||
52+
getManifestDatabaseContributions(manifest).length ||
5053
manifest.agents?.length ||
5154
manifest.contributes?.agents?.length ||
5255
manifest.themes?.length ||
5356
manifest.contributes?.themes?.length ||
54-
manifest.iconThemes?.length ||
55-
manifest.contributes?.iconThemes?.length,
57+
getManifestIconContributions(manifest).length,
5658
);
5759
}
5860

src/extensions/registry/extension-store.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,15 @@ import {
2727
import { resolveInstalledExtensionId } from "./extension-store-runtime";
2828
import type { AvailableExtension, ExtensionInstallationMetadata } from "./extension-store-types";
2929
import type { ExtensionManifest } from "../types/extension-manifest";
30+
import { getManifestDatabaseContributions } from "../types/extension-contributions";
3031
import {
3132
recordExtensionLifecycleTelemetry,
3233
recordExtensionRegistrySync,
3334
recordExtensionUpdateCheck,
3435
} from "@/features/telemetry/services/telemetry";
3536

3637
function isBuiltInDatabaseExtension(manifest: ExtensionManifest): boolean {
37-
return (
38-
manifest.databaseProviders?.some((provider) => provider.id === "sqlite") ||
39-
manifest.contributes?.databaseProviders?.some((provider) => provider.id === "sqlite") ||
40-
false
41-
);
38+
return getManifestDatabaseContributions(manifest).some((provider) => provider.id === "sqlite");
4239
}
4340

4441
interface ExtensionStoreState {

src/extensions/runtime/extension-contribution-runtime.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@ import type { IconThemeDefinition } from "../icon-themes/types";
55
import { themeRegistry } from "../themes/theme-registry";
66
import type { ThemeDefinition } from "../themes/types";
77
import type { ExtensionManifest } from "../types/extension-manifest";
8+
import { getManifestIconContributions } from "../types/extension-contributions";
89

910
function getThemeContributions(manifest: ExtensionManifest): ThemeContribution[] {
1011
return [...(manifest.themes ?? []), ...(manifest.contributes?.themes ?? [])];
1112
}
1213

1314
function getIconThemeContributions(manifest: ExtensionManifest): IconThemeContribution[] {
14-
return [...(manifest.iconThemes ?? []), ...(manifest.contributes?.iconThemes ?? [])];
15+
return getManifestIconContributions(manifest);
1516
}
1617

1718
function toCssVariables(colors: Record<string, string>): Record<string, string> {

src/extensions/types/extension-contributions.test.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { describe, expect, it } from "vite-plus/test";
22
import type { ExtensionManifest } from "./extension-manifest";
33
import {
4+
getManifestDatabaseContributions,
5+
getManifestIconContributions,
46
getManifestActivationEvents,
57
getManifestLanguageContributions,
68
matchesLanguageContribution,
@@ -76,4 +78,40 @@ describe("extension contribution normalization", () => {
7678
}),
7779
).toBe(false);
7880
});
81+
82+
it("reads database contributions from the new databases field", () => {
83+
const manifest = createManifest({
84+
categories: ["Database"],
85+
databases: [
86+
{
87+
id: "duckdb",
88+
label: "DuckDB",
89+
isFileBased: true,
90+
protocolVersion: 1,
91+
sidecar: { "darwin-arm64": "bin/athas-db-duckdb" },
92+
},
93+
],
94+
});
95+
96+
expect(getManifestDatabaseContributions(manifest).map((database) => database.id)).toEqual([
97+
"duckdb",
98+
]);
99+
});
100+
101+
it("reads icon contributions from the new icons field", () => {
102+
const manifest = createManifest({
103+
categories: ["Icon Theme"],
104+
contributes: {
105+
icons: [
106+
{
107+
id: "market",
108+
name: "Market",
109+
iconDefinitions: {},
110+
},
111+
],
112+
},
113+
});
114+
115+
expect(getManifestIconContributions(manifest).map((icon) => icon.id)).toEqual(["market"]);
116+
});
79117
});

src/extensions/types/extension-contributions.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import type {
22
CommandContribution,
3+
DatabaseProviderContribution,
34
ExtensionManifest,
5+
IconThemeContribution,
46
KeybindingContribution,
57
LanguageContribution,
68
Snippet,
@@ -73,6 +75,26 @@ export function getManifestSnippetContributions(
7375
return [...(manifest.snippets || []), ...(manifest.contributes?.snippets || [])];
7476
}
7577

78+
export function getManifestDatabaseContributions(
79+
manifest: ExtensionManifest,
80+
): DatabaseProviderContribution[] {
81+
return [
82+
...(manifest.databases || []),
83+
...(manifest.databaseProviders || []),
84+
...(manifest.contributes?.databases || []),
85+
...(manifest.contributes?.databaseProviders || []),
86+
];
87+
}
88+
89+
export function getManifestIconContributions(manifest: ExtensionManifest): IconThemeContribution[] {
90+
return [
91+
...(manifest.icons || []),
92+
...(manifest.iconThemes || []),
93+
...(manifest.contributes?.icons || []),
94+
...(manifest.contributes?.iconThemes || []),
95+
];
96+
}
97+
7698
export function getManifestInlineSnippets(manifest: ExtensionManifest): Array<{
7799
language: string;
78100
prefix: string;

src/extensions/types/extension-manifest.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export interface ExtensionManifest {
3838
languages?: LanguageContribution[];
3939

4040
// Database provider sidecars
41+
databases?: DatabaseProviderContribution[];
4142
databaseProviders?: DatabaseProviderContribution[];
4243

4344
// ACP agent contributions
@@ -47,6 +48,7 @@ export interface ExtensionManifest {
4748
themes?: ThemeContribution[];
4849

4950
// File icon theme contributions
51+
icons?: IconThemeContribution[];
5052
iconThemes?: IconThemeContribution[];
5153

5254
// LSP configuration
@@ -446,11 +448,13 @@ export interface PlatformPackage {
446448

447449
export interface UIContributions {
448450
languages?: LanguageContribution[];
451+
databases?: DatabaseProviderContribution[];
449452
databaseProviders?: DatabaseProviderContribution[];
450453
agents?: AgentContribution[];
451454
grammars?: GrammarConfiguration[];
452455
snippets?: SnippetContribution[];
453456
themes?: ThemeContribution[];
457+
icons?: IconThemeContribution[];
454458
iconThemes?: IconThemeContribution[];
455459
keybindings?: KeybindingContribution[];
456460
commands?: CommandContribution[];

src/features/database/components/connection/connection-validation.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,21 @@ describe("database connection validation", () => {
88
"athas.database.redis",
99
{
1010
isInstalled: true,
11-
manifest: { databaseProviders: [{ id: "redis", protocolVersion: 1 }] },
11+
manifest: { databases: [{ id: "redis", protocolVersion: 1 }] },
1212
},
1313
],
1414
[
1515
"athas.database.postgres",
1616
{
1717
isInstalled: true,
18-
manifest: { databaseProviders: [{ id: " postgres ", protocolVersion: 1 }] },
18+
manifest: { databases: [{ id: " postgres ", protocolVersion: 1 }] },
1919
},
2020
],
2121
[
2222
"athas.database.mysql",
2323
{
2424
isInstalled: false,
25-
manifest: { databaseProviders: [{ id: "mysql", protocolVersion: 1 }] },
25+
manifest: { databases: [{ id: "mysql", protocolVersion: 1 }] },
2626
},
2727
],
2828
]);
@@ -43,21 +43,21 @@ describe("database connection validation", () => {
4343
"athas.database.sqlite",
4444
{
4545
isInstalled: true,
46-
manifest: { databaseProviders: [{ id: "sqlite" }] },
46+
manifest: { databases: [{ id: "sqlite" }] },
4747
},
4848
],
4949
[
5050
"athas.database.postgres",
5151
{
5252
isInstalled: true,
53-
manifest: { databaseProviders: [{ id: "postgres", protocolVersion: 2 }] },
53+
manifest: { databases: [{ id: "postgres", protocolVersion: 2 }] },
5454
},
5555
],
5656
[
5757
"athas.database.redis",
5858
{
5959
isInstalled: true,
60-
manifest: { databaseProviders: [{ id: "redis", protocolVersion: 1 }] },
60+
manifest: { databases: [{ id: "redis", protocolVersion: 1 }] },
6161
},
6262
],
6363
]);

0 commit comments

Comments
 (0)