mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-08-28 05:27:24 +00:00
refactor: remove package manager state files
This commit is contained in:
parent
a4a4532922
commit
9c28626f24
5 changed files with 1 additions and 296 deletions
62
.roo/package-lock.json
generated
62
.roo/package-lock.json
generated
|
|
@ -1,62 +0,0 @@
|
|||
{
|
||||
"name": "roo-prepare",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "roo-prepare",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"commander": "^11.1.0"
|
||||
},
|
||||
"bin": {
|
||||
"prepare": "dist/prepare-cli.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.11.0",
|
||||
"typescript": "^5.3.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.17.30",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.30.tgz",
|
||||
"integrity": "sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": "~6.19.2"
|
||||
}
|
||||
},
|
||||
"node_modules/commander": {
|
||||
"version": "11.1.0",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
|
||||
"integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=16"
|
||||
}
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.8.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
|
||||
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.17"
|
||||
}
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
{
|
||||
"name": "roo-iterate",
|
||||
"version": "1.0.0",
|
||||
"description": "Iteration task management system",
|
||||
"private": true,
|
||||
"bin": {
|
||||
"iterate": "./dist/iterate-cli.js"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "tsc",
|
||||
"prepare": "npm run build",
|
||||
"start": "node ./dist/iterate-cli.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"commander": "^11.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.11.0",
|
||||
"typescript": "^5.3.3"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,113 +0,0 @@
|
|||
import { ComponentMetadata, PackageManagerItem } from "@/types/package-manager"
|
||||
|
||||
interface Filters {
|
||||
type: string
|
||||
search: string
|
||||
tags: string[]
|
||||
}
|
||||
|
||||
type Subcomponent = {
|
||||
type: string
|
||||
path: string
|
||||
metadata?: ComponentMetadata
|
||||
lastUpdated?: string
|
||||
}
|
||||
|
||||
export class PackageManagerViewStateManager {
|
||||
private items: PackageManagerItem[] = []
|
||||
private sortBy: "name" | "lastUpdated" = "name"
|
||||
private sortOrder: "asc" | "desc" = "asc"
|
||||
private filters: Filters = { type: "", search: "", tags: [] }
|
||||
|
||||
setItems(items: PackageManagerItem[]) {
|
||||
this.items = items
|
||||
}
|
||||
|
||||
setSortBy(sortBy: "name" | "lastUpdated") {
|
||||
this.sortBy = sortBy
|
||||
}
|
||||
|
||||
setSortOrder(sortOrder: "asc" | "desc") {
|
||||
this.sortOrder = sortOrder
|
||||
}
|
||||
|
||||
setFilters(filters: Partial<Filters>) {
|
||||
this.filters = { ...this.filters, ...filters }
|
||||
}
|
||||
|
||||
private isParentItem(item: PackageManagerItem | Subcomponent): item is PackageManagerItem {
|
||||
return "name" in item && "description" in item
|
||||
}
|
||||
|
||||
private isSubcomponent(item: PackageManagerItem | Subcomponent): item is Subcomponent {
|
||||
return "metadata" in item
|
||||
}
|
||||
|
||||
private itemMatchesFilters(item: PackageManagerItem | Subcomponent): boolean {
|
||||
// Helper function to check if text matches search term
|
||||
const matchesSearch = (text: string) => {
|
||||
if (!this.filters.search) return true
|
||||
return text.toLowerCase().includes(this.filters.search.toLowerCase())
|
||||
}
|
||||
|
||||
// Helper function to check if tags match
|
||||
const matchesTags = (tags?: string[]) => {
|
||||
if (!this.filters.tags.length) return true
|
||||
return tags?.some((tag) => this.filters.tags.includes(tag)) ?? false
|
||||
}
|
||||
|
||||
// Helper function to check if type matches
|
||||
const matchesType = (type: string) => {
|
||||
if (!this.filters.type) return true
|
||||
return type === this.filters.type
|
||||
}
|
||||
|
||||
// For parent items
|
||||
if (this.isParentItem(item)) {
|
||||
// For packages, check if any subcomponent matches the type filter
|
||||
if (this.filters.type && item.type === "package" && item.items?.length) {
|
||||
const hasMatchingSubcomponent = item.items.some((subItem) => subItem.type === this.filters.type)
|
||||
if (hasMatchingSubcomponent) {
|
||||
// If a subcomponent matches the type, only check other filters on the parent
|
||||
return (
|
||||
(!this.filters.search || matchesSearch(item.name) || matchesSearch(item.description)) &&
|
||||
(!this.filters.tags.length || matchesTags(item.tags))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// For non-packages or if no subcomponent matches, check all filters
|
||||
return (
|
||||
matchesType(item.type) &&
|
||||
(!this.filters.search || matchesSearch(item.name) || matchesSearch(item.description)) &&
|
||||
(!this.filters.tags.length || matchesTags(item.tags))
|
||||
)
|
||||
}
|
||||
|
||||
// For subcomponents
|
||||
if (this.isSubcomponent(item)) {
|
||||
if (!item.metadata) return false
|
||||
return (
|
||||
matchesType(item.type) &&
|
||||
(!this.filters.search ||
|
||||
matchesSearch(item.metadata.name) ||
|
||||
matchesSearch(item.metadata.description)) &&
|
||||
(!this.filters.tags.length || matchesTags(item.metadata.tags))
|
||||
)
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
getFilteredAndSortedItems(): PackageManagerItem[] {
|
||||
return [...this.items]
|
||||
.filter((item) => this.itemMatchesFilters(item))
|
||||
.sort((a, b) => {
|
||||
const aValue = this.sortBy === "name" ? a.name : a.lastUpdated || ""
|
||||
const bValue = this.sortBy === "name" ? b.name : b.lastUpdated || ""
|
||||
|
||||
const comparison = aValue.localeCompare(bValue)
|
||||
return this.sortOrder === "asc" ? comparison : -comparison
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -1,98 +0,0 @@
|
|||
import { PackageManagerViewStateManager } from "../PackageManagerViewStateManager"
|
||||
import { PackageManagerItem } from "@/types/package-manager"
|
||||
|
||||
describe("PackageManagerViewStateManager", () => {
|
||||
let stateManager: PackageManagerViewStateManager
|
||||
|
||||
const mockItems: PackageManagerItem[] = [
|
||||
{
|
||||
name: "B Component",
|
||||
description: "Second component",
|
||||
type: "mcp server",
|
||||
version: "1.0.0",
|
||||
lastUpdated: "2025-04-13T09:00:00-07:00",
|
||||
url: "https://example.com/b",
|
||||
repoUrl: "https://example.com",
|
||||
path: "b",
|
||||
items: [],
|
||||
},
|
||||
{
|
||||
name: "A Component",
|
||||
description: "First component",
|
||||
type: "mcp server",
|
||||
version: "1.0.0",
|
||||
lastUpdated: "2025-04-14T09:00:00-07:00",
|
||||
url: "https://example.com/a",
|
||||
repoUrl: "https://example.com",
|
||||
path: "a",
|
||||
items: [],
|
||||
},
|
||||
]
|
||||
|
||||
beforeEach(() => {
|
||||
stateManager = new PackageManagerViewStateManager()
|
||||
stateManager.setItems(mockItems)
|
||||
})
|
||||
|
||||
describe("sorting", () => {
|
||||
it("should sort items by name in ascending order", () => {
|
||||
stateManager.setSortBy("name")
|
||||
stateManager.setSortOrder("asc")
|
||||
|
||||
const sortedItems = stateManager.getFilteredAndSortedItems()
|
||||
expect(sortedItems[0].name).toBe("A Component")
|
||||
expect(sortedItems[1].name).toBe("B Component")
|
||||
})
|
||||
|
||||
it("should sort items by name in descending order", () => {
|
||||
stateManager.setSortBy("name")
|
||||
stateManager.setSortOrder("desc")
|
||||
|
||||
const sortedItems = stateManager.getFilteredAndSortedItems()
|
||||
expect(sortedItems[0].name).toBe("B Component")
|
||||
expect(sortedItems[1].name).toBe("A Component")
|
||||
})
|
||||
|
||||
it("should sort items by lastUpdated in ascending order", () => {
|
||||
stateManager.setSortBy("lastUpdated")
|
||||
stateManager.setSortOrder("asc")
|
||||
|
||||
const sortedItems = stateManager.getFilteredAndSortedItems()
|
||||
expect(sortedItems[0].lastUpdated).toBe("2025-04-13T09:00:00-07:00")
|
||||
expect(sortedItems[1].lastUpdated).toBe("2025-04-14T09:00:00-07:00")
|
||||
})
|
||||
|
||||
it("should sort items by lastUpdated in descending order", () => {
|
||||
stateManager.setSortBy("lastUpdated")
|
||||
stateManager.setSortOrder("desc")
|
||||
|
||||
const sortedItems = stateManager.getFilteredAndSortedItems()
|
||||
expect(sortedItems[0].lastUpdated).toBe("2025-04-14T09:00:00-07:00")
|
||||
expect(sortedItems[1].lastUpdated).toBe("2025-04-13T09:00:00-07:00")
|
||||
})
|
||||
|
||||
it("should maintain sort order when items are updated", () => {
|
||||
stateManager.setSortBy("name")
|
||||
stateManager.setSortOrder("asc")
|
||||
|
||||
const newItem: PackageManagerItem = {
|
||||
name: "C Component",
|
||||
description: "Third component",
|
||||
type: "mcp server",
|
||||
version: "1.0.0",
|
||||
lastUpdated: "2025-04-15T09:00:00-07:00",
|
||||
url: "https://example.com/c",
|
||||
repoUrl: "https://example.com",
|
||||
path: "c",
|
||||
items: [],
|
||||
}
|
||||
|
||||
stateManager.setItems([...mockItems, newItem])
|
||||
|
||||
const sortedItems = stateManager.getFilteredAndSortedItems()
|
||||
expect(sortedItems[0].name).toBe("A Component")
|
||||
expect(sortedItems[1].name).toBe("B Component")
|
||||
expect(sortedItems[2].name).toBe("C Component")
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
@ -210,8 +210,7 @@ export const SelectDropdown = React.memo(
|
|||
<div className="flex flex-col w-full">
|
||||
{/* Search input */}
|
||||
<div className="relative p-2 border-b border-vscode-dropdown-border">
|
||||
<input
|
||||
aria-label="Search"
|
||||
<input aria-label="Search"
|
||||
ref={searchInputRef}
|
||||
value={searchValue}
|
||||
onChange={(e) => setSearchValue(e.target.value)}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue