fix(discovery): add null-safe validation for v3 array entries

Filter out null, undefined, or malformed entries in installed_plugins.json
before accessing properties. Prevents fatal crash on corrupted data.

Addresses cubic-dev-ai review feedback.
This commit is contained in:
Robin Mordasiewicz
2026-03-14 05:35:12 +00:00
parent bc0ba843ac
commit 0d1d405a72
2 changed files with 20 additions and 5 deletions

5
dist/index.js vendored
View File

@@ -19452,9 +19452,12 @@ function v3EntryToInstallation(entry) {
gitCommitSha: entry.gitCommitSha
};
}
function isValidV3Entry(entry) {
return entry != null && typeof entry === "object" && typeof entry.name === "string" && typeof entry.marketplace === "string" && typeof entry.installPath === "string";
}
function extractPluginEntries(db) {
if (Array.isArray(db)) {
return db.map((entry) => [
return db.filter(isValidV3Entry).map((entry) => [
`${entry.name}@${entry.marketplace}`,
v3EntryToInstallation(entry)
]);

View File

@@ -108,14 +108,26 @@ function v3EntryToInstallation(entry: InstalledPluginEntryV3): PluginInstallatio
}
}
function isValidV3Entry(entry: unknown): entry is InstalledPluginEntryV3 {
return (
entry != null &&
typeof entry === "object" &&
typeof (entry as Record<string, unknown>).name === "string" &&
typeof (entry as Record<string, unknown>).marketplace === "string" &&
typeof (entry as Record<string, unknown>).installPath === "string"
)
}
function extractPluginEntries(
db: InstalledPluginsDatabase,
): Array<[string, PluginInstallation | undefined]> {
if (Array.isArray(db)) {
return db.map((entry) => [
`${entry.name}@${entry.marketplace}`,
v3EntryToInstallation(entry),
])
return db
.filter(isValidV3Entry)
.map((entry) => [
`${entry.name}@${entry.marketplace}`,
v3EntryToInstallation(entry),
])
}
if (db.version === 1) {
return Object.entries(db.plugins).map(([key, installation]) => [key, installation])