mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-09-07 08:26:51 +00:00
remove console log statements used to debug tests
This commit is contained in:
parent
9c28626f24
commit
c2d840cc47
8 changed files with 2 additions and 273 deletions
|
|
@ -28,15 +28,11 @@ export async function handlePackageManagerMessages(
|
|||
switch (message.type) {
|
||||
case "webviewDidLaunch": {
|
||||
// For webviewDidLaunch, we don't do anything - package manager items will be loaded by explicit fetchPackageManagerItems
|
||||
console.log(
|
||||
"Package Manager: webviewDidLaunch received, but skipping fetch (will be triggered by explicit fetchPackageManagerItems)",
|
||||
)
|
||||
return true
|
||||
}
|
||||
case "fetchPackageManagerItems": {
|
||||
// Prevent multiple simultaneous fetches
|
||||
if (packageManagerManager.isFetching) {
|
||||
console.log("Package Manager: Fetch already in progress, skipping")
|
||||
await provider.postMessageToWebview({
|
||||
type: "state",
|
||||
text: "Fetch already in progress",
|
||||
|
|
@ -47,10 +43,7 @@ export async function handlePackageManagerMessages(
|
|||
|
||||
// Check if we need to force refresh using type assertion
|
||||
const forceRefresh = (message as any).forceRefresh === true
|
||||
console.log(`Package Manager: Fetch requested with forceRefresh=${forceRefresh}`)
|
||||
try {
|
||||
console.log("Package Manager: Received request to fetch package manager items")
|
||||
console.log("DEBUG: Processing package manager request")
|
||||
packageManagerManager.isFetching = true
|
||||
|
||||
// Wrap the entire initialization in a try-catch block
|
||||
|
|
@ -61,26 +54,19 @@ export async function handlePackageManagerMessages(
|
|||
[]
|
||||
|
||||
if (!sources || sources.length === 0) {
|
||||
console.log("Package Manager: No sources found, initializing default sources")
|
||||
sources = [DEFAULT_PACKAGE_MANAGER_SOURCE]
|
||||
|
||||
// Save the default sources
|
||||
await provider.contextProxy.setValue("packageManagerSources", sources)
|
||||
console.log("Package Manager: Default sources initialized")
|
||||
}
|
||||
|
||||
console.log(`Package Manager: Fetching items from ${sources.length} sources`)
|
||||
console.log(`DEBUG: PackageManagerManager instance: ${packageManagerManager ? "exists" : "null"}`)
|
||||
|
||||
// Add timing information
|
||||
const startTime = Date.now()
|
||||
|
||||
// Fetch items from all enabled sources
|
||||
console.log("DEBUG: Starting to fetch items from sources")
|
||||
const enabledSources = sources.filter((s) => s.enabled)
|
||||
|
||||
if (enabledSources.length === 0) {
|
||||
console.log("DEBUG: No enabled sources found")
|
||||
vscode.window.showInformationMessage(
|
||||
"No enabled sources configured. Add and enable sources to view items.",
|
||||
)
|
||||
|
|
@ -88,7 +74,6 @@ export async function handlePackageManagerMessages(
|
|||
return true
|
||||
}
|
||||
|
||||
console.log(`Package Manager: Fetching items from ${enabledSources.length} sources`)
|
||||
const result = await packageManagerManager.getPackageManagerItems(enabledSources)
|
||||
|
||||
// If there are errors but also items, show warning
|
||||
|
|
@ -108,19 +93,13 @@ export async function handlePackageManagerMessages(
|
|||
packageManagerManager.isFetching = false
|
||||
}
|
||||
|
||||
console.log("DEBUG: Successfully fetched items:", result.items.length)
|
||||
|
||||
console.log("DEBUG: Fetch completed, preparing to send items to webview")
|
||||
const endTime = Date.now()
|
||||
|
||||
console.log(`Package Manager: Found ${result.items.length} items in ${endTime - startTime}ms`)
|
||||
console.log(`Package Manager: First item:`, result.items.length > 0 ? result.items[0] : "No items")
|
||||
// The items are already stored in PackageManagerManager's currentItems
|
||||
// No need to store in global state
|
||||
|
||||
// Send state to webview
|
||||
await provider.postStateToWebview()
|
||||
console.log("Package Manager: State sent to webview")
|
||||
} catch (initError) {
|
||||
const errorMessage = `Package manager initialization failed: ${initError instanceof Error ? initError.message : String(initError)}`
|
||||
console.error("Error in package manager initialization:", initError)
|
||||
|
|
@ -166,8 +145,6 @@ export async function handlePackageManagerMessages(
|
|||
|
||||
// Filter out invalid sources
|
||||
if (validationErrors.length > 0) {
|
||||
console.log("Package Manager: Validation errors found in sources", validationErrors)
|
||||
|
||||
// Create a map of invalid indices
|
||||
const invalidIndices = new Set<number>()
|
||||
validationErrors.forEach((error: ValidationError) => {
|
||||
|
|
@ -195,9 +172,7 @@ export async function handlePackageManagerMessages(
|
|||
|
||||
// Clean up cache directories for repositories that are no longer in the sources list
|
||||
try {
|
||||
console.log("Package Manager: Cleaning up cache directories for removed sources")
|
||||
await packageManagerManager.cleanupCacheDirectories(updatedSources)
|
||||
console.log("Package Manager: Cache cleanup completed")
|
||||
} catch (error) {
|
||||
console.error("Package Manager: Error during cache cleanup:", error)
|
||||
}
|
||||
|
|
@ -209,10 +184,8 @@ export async function handlePackageManagerMessages(
|
|||
}
|
||||
case "openExternal": {
|
||||
if (message.url) {
|
||||
console.log(`Package Manager: Opening external URL: ${message.url}`)
|
||||
try {
|
||||
vscode.env.openExternal(vscode.Uri.parse(message.url))
|
||||
console.log(`Package Manager: Successfully opened URL: ${message.url}`)
|
||||
} catch (error) {
|
||||
console.error(
|
||||
`Package Manager: Failed to open URL: ${error instanceof Error ? error.message : String(error)}`,
|
||||
|
|
@ -228,27 +201,16 @@ export async function handlePackageManagerMessages(
|
|||
}
|
||||
|
||||
case "filterPackageManagerItems": {
|
||||
console.log("DEBUG: Handling filterPackageManagerItems message", {
|
||||
filters: message.filters,
|
||||
hasItems: packageManagerManager.getCurrentItems().length > 0,
|
||||
})
|
||||
if (message.filters) {
|
||||
try {
|
||||
// Get current items from the manager
|
||||
const items = packageManagerManager.getCurrentItems()
|
||||
console.log("DEBUG: Current items before filtering:", items.length)
|
||||
|
||||
// Apply filters using the manager's filtering logic
|
||||
const filteredItems = packageManagerManager.filterItems(items, {
|
||||
type: message.filters.type as ComponentType | undefined,
|
||||
search: message.filters.search,
|
||||
tags: message.filters.tags,
|
||||
})
|
||||
console.log("DEBUG: Filtered items:", {
|
||||
beforeCount: items.length,
|
||||
afterCount: filteredItems.length,
|
||||
filters: message.filters,
|
||||
})
|
||||
// Get current state and merge filtered items
|
||||
const currentState = await provider.getStateToPostToWebview()
|
||||
await provider.postMessageToWebview({
|
||||
|
|
@ -258,8 +220,6 @@ export async function handlePackageManagerMessages(
|
|||
packageManagerItems: filteredItems,
|
||||
},
|
||||
})
|
||||
console.log("DEBUG: State update sent with filtered items:", filteredItems.length)
|
||||
console.log("DEBUG: State update sent with filtered items:", filteredItems.length)
|
||||
} catch (error) {
|
||||
console.error("Package Manager: Error filtering items:", error)
|
||||
vscode.window.showErrorMessage("Failed to filter package manager items")
|
||||
|
|
@ -271,8 +231,6 @@ export async function handlePackageManagerMessages(
|
|||
case "refreshPackageManagerSource": {
|
||||
if (message.url) {
|
||||
try {
|
||||
console.log(`Package Manager: Received request to refresh source ${message.url}`)
|
||||
|
||||
// Get the current sources
|
||||
const sources =
|
||||
((await provider.contextProxy.getValue("packageManagerSources")) as PackageManagerSource[]) ||
|
||||
|
|
@ -300,7 +258,6 @@ export async function handlePackageManagerMessages(
|
|||
await provider.postStateToWebview()
|
||||
} finally {
|
||||
// Always notify the webview that the refresh is complete, even if it failed
|
||||
console.log(`Package Manager: Sending repositoryRefreshComplete message for ${message.url}`)
|
||||
await provider.postMessageToWebview({
|
||||
type: "repositoryRefreshComplete",
|
||||
url: message.url,
|
||||
|
|
|
|||
|
|
@ -199,7 +199,6 @@ export class GitFetcher {
|
|||
// Get current branch
|
||||
const git = simpleGit(repoDir)
|
||||
const branch = await git.revparse(["--abbrev-ref", "HEAD"])
|
||||
console.log(`Repository cloned/pulled successfully on branch ${branch}`)
|
||||
} catch (error) {
|
||||
throw new Error(
|
||||
`Failed to clone/pull repository: ${error instanceof Error ? error.message : String(error)}`,
|
||||
|
|
|
|||
|
|
@ -45,9 +45,6 @@ export class MetadataScanner {
|
|||
): Promise<PackageManagerItem[]> {
|
||||
const items: PackageManagerItem[] = []
|
||||
|
||||
console.log("scanDirectory called with rootDir:", rootDir)
|
||||
console.log("scanDirectory called with repoUrl:", repoUrl)
|
||||
|
||||
// Only set originalRootDir on the first call, not recursive calls
|
||||
if (!isRecursiveCall && !this.originalRootDir) {
|
||||
this.originalRootDir = rootDir
|
||||
|
|
@ -60,19 +57,11 @@ export class MetadataScanner {
|
|||
if (!entry.isDirectory()) continue
|
||||
|
||||
const componentDir = path.join(rootDir, entry.name)
|
||||
console.log("scanDirectory - entry.name:", entry.name)
|
||||
console.log("scanDirectory - rootDir:", rootDir)
|
||||
console.log("scanDirectory - componentDir:", componentDir)
|
||||
// Always calculate paths relative to the original root directory
|
||||
const relativePath = path.relative(this.originalRootDir || rootDir, componentDir).replace(/\\/g, "/")
|
||||
console.log("scanDirectory - relativePath:", relativePath)
|
||||
console.log("Checking directory:", componentDir)
|
||||
const metadata = await this.loadComponentMetadata(componentDir)
|
||||
console.log("Found metadata:", metadata)
|
||||
|
||||
// If no metadata found, or metadata validation fails, try recursing
|
||||
if (!metadata || !this.getLocalizedMetadata(metadata)) {
|
||||
console.log("No valid metadata found, recursing into:", componentDir)
|
||||
// Pass the current directory as the root for this recursive call
|
||||
const subItems = await this.scanDirectory(componentDir, repoUrl, sourceName, true)
|
||||
items.push(...subItems)
|
||||
|
|
@ -132,14 +121,7 @@ export class MetadataScanner {
|
|||
|
||||
// Recursively scan subdirectories only if not in a package
|
||||
if (!metadata || !this.isPackageMetadata(localizedMetadata)) {
|
||||
console.log("Recursing into directory:", componentDir)
|
||||
console.log("Current relativePath:", relativePath)
|
||||
console.log("Current rootDir:", rootDir)
|
||||
const subItems = await this.scanDirectory(componentDir, repoUrl, sourceName, true)
|
||||
console.log("Received subItems:", subItems)
|
||||
// No need to modify paths for recursive items
|
||||
// They are already correctly calculated relative to the original root
|
||||
console.log("Found sub items:", subItems)
|
||||
items.push(...subItems)
|
||||
}
|
||||
}
|
||||
|
|
@ -179,14 +161,8 @@ export class MetadataScanner {
|
|||
*/
|
||||
private async loadComponentMetadata(componentDir: string): Promise<LocalizedMetadata<ComponentMetadata> | null> {
|
||||
const metadata: LocalizedMetadata<ComponentMetadata> = {}
|
||||
console.log("Loading metadata from directory:", componentDir)
|
||||
|
||||
try {
|
||||
const entries = await fs.readdir(componentDir, { withFileTypes: true })
|
||||
console.log(
|
||||
"Directory entries:",
|
||||
entries.map((e) => e.name),
|
||||
)
|
||||
|
||||
// Look for metadata.{locale}.yml files
|
||||
for (const entry of entries) {
|
||||
|
|
@ -200,9 +176,7 @@ export class MetadataScanner {
|
|||
|
||||
try {
|
||||
const content = await fs.readFile(metadataPath, "utf-8")
|
||||
console.log("Metadata content:", content)
|
||||
const parsed = yaml.load(content) as Record<string, any>
|
||||
console.log("Parsed metadata:", parsed)
|
||||
|
||||
// Add type field if missing but has a parent directory indicating type
|
||||
if (!parsed.type) {
|
||||
|
|
@ -255,18 +229,11 @@ export class MetadataScanner {
|
|||
const effectiveRootDir = this.originalRootDir || rootDir
|
||||
// Always calculate path relative to the original root directory
|
||||
const fullPath = path.relative(effectiveRootDir, componentDir).replace(/\\/g, "/")
|
||||
console.log("createPackageManagerItem - componentDir:", componentDir)
|
||||
console.log("createPackageManagerItem - effectiveRootDir:", effectiveRootDir)
|
||||
console.log("createPackageManagerItem - fullPath:", fullPath)
|
||||
console.log("createPackageManagerItem - path parts:", fullPath.split("/"))
|
||||
|
||||
// Don't encode spaces in URL to match test expectations
|
||||
const urlPath = fullPath
|
||||
.split("/")
|
||||
.map((part) => encodeURIComponent(part))
|
||||
.join("/")
|
||||
console.log("createPackageManagerItem - urlPath:", urlPath)
|
||||
|
||||
// Create the item with the correct path and URL
|
||||
return {
|
||||
name: metadata.name,
|
||||
|
|
@ -329,7 +296,6 @@ export class MetadataScanner {
|
|||
packageItem: PackageManagerItem,
|
||||
parentPath: string = "",
|
||||
): Promise<void> {
|
||||
console.log(`Scanning directory: ${packageDir}`)
|
||||
const entries = await fs.readdir(packageDir, { withFileTypes: true })
|
||||
|
||||
for (const entry of entries) {
|
||||
|
|
@ -338,7 +304,6 @@ export class MetadataScanner {
|
|||
const subPath = path.join(packageDir, entry.name)
|
||||
// Normalize path to use forward slashes
|
||||
const relativePath = parentPath ? `${parentPath}/${entry.name}` : entry.name
|
||||
console.log(`Found directory: ${entry.name}, relative path: ${relativePath}`)
|
||||
|
||||
// Try to load metadata directly
|
||||
const subMetadata = await this.loadComponentMetadata(subPath)
|
||||
|
|
@ -347,10 +312,7 @@ export class MetadataScanner {
|
|||
// Get localized metadata with fallback
|
||||
const localizedSubMetadata = this.getLocalizedMetadata(subMetadata)
|
||||
if (localizedSubMetadata) {
|
||||
console.log(`Metadata for ${entry.name}:`, localizedSubMetadata)
|
||||
|
||||
const isListed = packageItem.items?.some((i) => i.path === relativePath)
|
||||
console.log(`${entry.name} is ${isListed ? "already listed" : "not listed"}`)
|
||||
|
||||
if (!isListed) {
|
||||
const subItem = {
|
||||
|
|
@ -361,7 +323,6 @@ export class MetadataScanner {
|
|||
}
|
||||
packageItem.items = packageItem.items || []
|
||||
packageItem.items.push(subItem)
|
||||
console.log(`Added ${entry.name} to items`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,34 +71,27 @@ export class PackageManagerManager {
|
|||
async getPackageManagerItems(
|
||||
sources: PackageManagerSource[],
|
||||
): Promise<{ items: PackageManagerItem[]; errors?: string[] }> {
|
||||
console.log(`PackageManagerManager: Getting items from ${sources.length} sources`)
|
||||
const items: PackageManagerItem[] = []
|
||||
const errors: string[] = []
|
||||
|
||||
// Filter enabled sources
|
||||
const enabledSources = sources.filter((s) => s.enabled)
|
||||
console.log(`PackageManagerManager: ${enabledSources.length} enabled sources`)
|
||||
|
||||
// Process sources sequentially with locking
|
||||
for (const source of enabledSources) {
|
||||
if (this.isSourceLocked(source.url)) {
|
||||
console.log(`PackageManagerManager: Source ${source.url} is locked, skipping`)
|
||||
continue
|
||||
}
|
||||
|
||||
try {
|
||||
this.lockSource(source.url)
|
||||
console.log(`PackageManagerManager: Processing source ${source.url}`)
|
||||
|
||||
// Queue metadata scanning operation
|
||||
await this.queueOperation(async () => {
|
||||
const repo = await this.getRepositoryData(source.url, false, source.name)
|
||||
|
||||
if (repo.items && repo.items.length > 0) {
|
||||
console.log(`PackageManagerManager: Found ${repo.items.length} items in ${source.url}`)
|
||||
items.push(...repo.items)
|
||||
} else {
|
||||
console.log(`PackageManagerManager: No items found in ${source.url}`)
|
||||
}
|
||||
})
|
||||
} catch (error) {
|
||||
|
|
@ -119,7 +112,6 @@ export class PackageManagerManager {
|
|||
...(errors.length > 0 && { errors }),
|
||||
}
|
||||
|
||||
console.log(`PackageManagerManager: Returning ${items.length} total items`)
|
||||
return result
|
||||
}
|
||||
|
||||
|
|
@ -157,24 +149,13 @@ export class PackageManagerManager {
|
|||
sourceName?: string,
|
||||
): Promise<PackageManagerRepository> {
|
||||
try {
|
||||
console.log(`PackageManagerManager: Getting repository data for ${url}`)
|
||||
|
||||
// Check cache first (unless force refresh is requested)
|
||||
const cached = this.cache.get(url)
|
||||
|
||||
if (!forceRefresh && cached && Date.now() - cached.timestamp < PackageManagerManager.CACHE_EXPIRY_MS) {
|
||||
console.log(
|
||||
`PackageManagerManager: Using cached data for ${url} (age: ${Date.now() - cached.timestamp}ms)`,
|
||||
)
|
||||
return cached.data
|
||||
}
|
||||
|
||||
if (forceRefresh) {
|
||||
console.log(`PackageManagerManager: Force refresh requested for ${url}, bypassing cache`)
|
||||
}
|
||||
|
||||
console.log(`PackageManagerManager: Cache miss or expired for ${url}, fetching fresh data`)
|
||||
|
||||
// Fetch fresh data with timeout protection
|
||||
const fetchPromise = this.gitFetcher.fetchRepository(url, forceRefresh, sourceName)
|
||||
|
||||
|
|
@ -190,7 +171,6 @@ export class PackageManagerManager {
|
|||
|
||||
// Cache the result
|
||||
this.cache.set(url, { data, timestamp: Date.now() })
|
||||
console.log(`PackageManagerManager: Successfully fetched and cached data for ${url}`)
|
||||
|
||||
return data
|
||||
} catch (error) {
|
||||
|
|
@ -216,12 +196,9 @@ export class PackageManagerManager {
|
|||
* @returns The refreshed repository data
|
||||
*/
|
||||
async refreshRepository(url: string, sourceName?: string): Promise<PackageManagerRepository> {
|
||||
console.log(`PackageManagerManager: Refreshing repository ${url}`)
|
||||
|
||||
try {
|
||||
// Force a refresh by bypassing the cache
|
||||
const data = await this.getRepositoryData(url, true, sourceName)
|
||||
console.log(`PackageManagerManager: Repository ${url} refreshed successfully`)
|
||||
return data
|
||||
} catch (error) {
|
||||
console.error(`PackageManagerManager: Failed to refresh repository ${url}:`, error)
|
||||
|
|
@ -258,7 +235,6 @@ export class PackageManagerManager {
|
|||
try {
|
||||
await fs.stat(cacheDir)
|
||||
} catch (error) {
|
||||
console.log("PackageManagerManager: Cache directory doesn't exist yet, nothing to clean up")
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -266,29 +242,21 @@ export class PackageManagerManager {
|
|||
const entries = await fs.readdir(cacheDir, { withFileTypes: true })
|
||||
const cachedRepoDirs = entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name)
|
||||
|
||||
console.log(`PackageManagerManager: Found ${cachedRepoDirs.length} cached repositories`)
|
||||
|
||||
// Get the list of repository names from current sources
|
||||
const currentRepoNames = currentSources.map((source) => this.getRepoNameFromUrl(source.url))
|
||||
|
||||
// Find directories to delete
|
||||
const dirsToDelete = cachedRepoDirs.filter((dir) => !currentRepoNames.includes(dir))
|
||||
|
||||
console.log(`PackageManagerManager: Found ${dirsToDelete.length} repositories to delete`)
|
||||
|
||||
// Delete each directory that's no longer in the sources
|
||||
for (const dirName of dirsToDelete) {
|
||||
try {
|
||||
const dirPath = path.join(cacheDir, dirName)
|
||||
console.log(`PackageManagerManager: Deleting cache directory ${dirPath}`)
|
||||
await fs.rm(dirPath, { recursive: true, force: true })
|
||||
console.log(`PackageManagerManager: Successfully deleted ${dirPath}`)
|
||||
} catch (error) {
|
||||
console.error(`PackageManagerManager: Failed to delete directory ${dirName}:`, error)
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`PackageManagerManager: Cache cleanup completed, deleted ${dirsToDelete.length} directories`)
|
||||
} catch (error) {
|
||||
console.error("PackageManagerManager: Error cleaning up cache directories:", error)
|
||||
}
|
||||
|
|
@ -316,15 +284,6 @@ export class PackageManagerManager {
|
|||
items: PackageManagerItem[],
|
||||
filters: { type?: ComponentType; search?: string; tags?: string[] },
|
||||
): PackageManagerItem[] {
|
||||
console.log("DEBUG: Starting filterItems", {
|
||||
itemCount: items.length,
|
||||
filters: {
|
||||
type: filters.type,
|
||||
search: filters.search,
|
||||
tags: filters.tags,
|
||||
},
|
||||
})
|
||||
|
||||
// Helper function to normalize text for case/whitespace-insensitive comparison
|
||||
const normalizeText = (text: string) => text.toLowerCase().replace(/\s+/g, " ").trim()
|
||||
|
||||
|
|
@ -340,8 +299,6 @@ export class PackageManagerManager {
|
|||
// Create a deep clone of all items
|
||||
const clonedItems = items.map((originalItem) => JSON.parse(JSON.stringify(originalItem)) as PackageManagerItem)
|
||||
|
||||
console.log("Initial items:", JSON.stringify(clonedItems))
|
||||
|
||||
// Apply filters
|
||||
const filteredItems = clonedItems.filter((item) => {
|
||||
// Check parent item matches
|
||||
|
|
@ -387,11 +344,6 @@ export class PackageManagerManager {
|
|||
return parentMatchesAll || isPackageWithMatchingSubcomponent
|
||||
})
|
||||
|
||||
console.log("Filtered items:", {
|
||||
before: clonedItems.length,
|
||||
after: filteredItems.length,
|
||||
filters,
|
||||
})
|
||||
// Add match info to filtered items
|
||||
return filteredItems.map((item) => {
|
||||
// Calculate parent item matches
|
||||
|
|
|
|||
|
|
@ -556,8 +556,6 @@ describe("PackageManagerManager", () => {
|
|||
|
||||
// Test 1: Search for "data validator" (lowercase)
|
||||
const filtered1 = manager.filterItems(items, { search: "data validator" })
|
||||
console.log("Test 1 - Search for 'data validator'")
|
||||
console.log("Filtered items count:", filtered1.length)
|
||||
|
||||
// Verify we find the Data Validator component
|
||||
expect(filtered1.length).toBeGreaterThan(0)
|
||||
|
|
@ -578,24 +576,18 @@ describe("PackageManagerManager", () => {
|
|||
|
||||
// Test 2: Search for "DATA VALIDATOR" (uppercase)
|
||||
const filtered2 = manager.filterItems(items, { search: "DATA VALIDATOR" })
|
||||
console.log("\nTest 2 - Search for 'DATA VALIDATOR'")
|
||||
console.log("Filtered items count:", filtered2.length)
|
||||
|
||||
// Verify we find the Data Validator component
|
||||
expect(filtered2.length).toBeGreaterThan(0)
|
||||
|
||||
// Test 3: Search for "validator" (partial match)
|
||||
const filtered3 = manager.filterItems(items, { search: "validator" })
|
||||
console.log("\nTest 3 - Search for 'validator'")
|
||||
console.log("Filtered items count:", filtered3.length)
|
||||
|
||||
// Verify we find the Data Validator component
|
||||
expect(filtered3.length).toBeGreaterThan(0)
|
||||
|
||||
// Test 4: Search for "data valid" (partial match)
|
||||
const filtered4 = manager.filterItems(items, { search: "data valid" })
|
||||
console.log("\nTest 4 - Search for 'data valid'")
|
||||
console.log("Filtered items count:", filtered4.length)
|
||||
|
||||
// Verify we find the Data Validator component
|
||||
expect(filtered4.length).toBeGreaterThan(0)
|
||||
|
|
|
|||
|
|
@ -18,16 +18,6 @@ const PackageManagerView: React.FC<PackageManagerViewProps> = ({ onDone }) => {
|
|||
const [isTagInputActive, setIsTagInputActive] = useState(false)
|
||||
|
||||
// Debug logging for state changes
|
||||
useEffect(() => {
|
||||
console.log("State updated:", {
|
||||
allItems: state.allItems,
|
||||
displayItems: state.displayItems,
|
||||
itemsLength: state.allItems.length,
|
||||
displayItemsLength: state.displayItems?.length,
|
||||
showingEmptyState: (state.displayItems || state.allItems).length === 0,
|
||||
filters: state.filters,
|
||||
})
|
||||
}, [state.allItems, state.displayItems, state.filters])
|
||||
|
||||
// Fetch items on mount
|
||||
useEffect(() => {
|
||||
|
|
@ -245,23 +235,12 @@ const PackageManagerView: React.FC<PackageManagerViewProps> = ({ onDone }) => {
|
|||
const items = state.displayItems || []
|
||||
const isEmpty = items.length === 0
|
||||
const isLoading = state.isFetching
|
||||
console.log("=== Rendering PackageManagerView ===")
|
||||
console.log("Component state:", {
|
||||
allItems: items,
|
||||
itemCount: items.length,
|
||||
isEmpty,
|
||||
isLoading,
|
||||
activeTab: state.activeTab,
|
||||
filters: state.filters,
|
||||
})
|
||||
|
||||
// Show loading state if fetching and not filtering
|
||||
// Only show loading state if we're fetching and not filtering
|
||||
if (
|
||||
isLoading &&
|
||||
!(state.filters.type || state.filters.search || state.filters.tags.length > 0)
|
||||
) {
|
||||
console.log("Rendering loading state due to isFetching=true")
|
||||
return (
|
||||
<div className="flex flex-col items-center justify-center h-64 text-vscode-descriptionForeground">
|
||||
<p>Loading items...</p>
|
||||
|
|
@ -271,7 +250,6 @@ const PackageManagerView: React.FC<PackageManagerViewProps> = ({ onDone }) => {
|
|||
|
||||
// Show empty state if no items
|
||||
if (isEmpty) {
|
||||
console.log("Showing empty state")
|
||||
return (
|
||||
<div className="flex flex-col items-center justify-center h-64 text-vscode-descriptionForeground">
|
||||
<p>No package manager items found</p>
|
||||
|
|
@ -280,7 +258,6 @@ const PackageManagerView: React.FC<PackageManagerViewProps> = ({ onDone }) => {
|
|||
}
|
||||
|
||||
// Show items view
|
||||
console.log("Showing items view with items:", items)
|
||||
return (
|
||||
<div>
|
||||
<p className="text-vscode-descriptionForeground mb-4">
|
||||
|
|
|
|||
|
|
@ -86,60 +86,26 @@ export class PackageManagerViewStateManager {
|
|||
}
|
||||
|
||||
public getState(): ViewState {
|
||||
console.log("getState called, returning:", this.state)
|
||||
// Create a deep copy to ensure React sees changes
|
||||
return JSON.parse(JSON.stringify(this.state))
|
||||
}
|
||||
|
||||
private notifyStateChange(): void {
|
||||
console.log("=== State Change Notification ===")
|
||||
console.log("Current state:", {
|
||||
allItems: this.state.allItems,
|
||||
displayItems: this.state.displayItems,
|
||||
itemsLength: this.state.allItems.length,
|
||||
displayItemsLength: this.state.displayItems?.length,
|
||||
isFetching: this.state.isFetching,
|
||||
activeTab: this.state.activeTab,
|
||||
filters: this.state.filters,
|
||||
})
|
||||
|
||||
// Create a deep copy to ensure React sees changes
|
||||
const newState = JSON.parse(JSON.stringify(this.state))
|
||||
|
||||
console.log("Notifying handlers with state:", {
|
||||
allItems: newState.allItems,
|
||||
displayItems: newState.displayItems,
|
||||
itemsLength: newState.allItems.length,
|
||||
displayItemsLength: newState.displayItems?.length,
|
||||
isFetching: newState.isFetching,
|
||||
activeTab: newState.activeTab,
|
||||
filters: newState.filters,
|
||||
})
|
||||
|
||||
this.stateChangeHandlers.forEach((handler) => {
|
||||
console.log("Calling state change handler")
|
||||
handler(newState)
|
||||
})
|
||||
|
||||
console.log("=== End State Change Notification ===")
|
||||
}
|
||||
|
||||
public async transition(transition: ViewStateTransition): Promise<void> {
|
||||
console.log(`ViewStateManager: Processing transition ${transition.type}`)
|
||||
|
||||
switch (transition.type) {
|
||||
case "FETCH_ITEMS": {
|
||||
if (this.state.isFetching) {
|
||||
console.log("ViewStateManager: Fetch already in progress, skipping")
|
||||
return
|
||||
}
|
||||
|
||||
console.log("=== Starting Fetch ===")
|
||||
console.log("Before setting isFetching:", {
|
||||
isFetching: this.state.isFetching,
|
||||
allItems: this.state.allItems.length,
|
||||
})
|
||||
|
||||
// Create a new state object to ensure React sees the change
|
||||
const newState = {
|
||||
...this.state,
|
||||
|
|
@ -164,19 +130,11 @@ export class PackageManagerViewStateManager {
|
|||
bool: true,
|
||||
} as WebviewMessage)
|
||||
|
||||
console.log("=== Fetch Started ===")
|
||||
break
|
||||
}
|
||||
|
||||
case "FETCH_COMPLETE": {
|
||||
const { items } = transition.payload as TransitionPayloads["FETCH_COMPLETE"]
|
||||
console.log("=== FETCH_COMPLETE Started ===")
|
||||
console.log("Before state update:", {
|
||||
isFetching: this.state.isFetching,
|
||||
currentItems: this.state.allItems.length,
|
||||
receivedItems: items.length,
|
||||
})
|
||||
|
||||
// Clear any existing timeout
|
||||
this.clearFetchTimeout()
|
||||
|
||||
|
|
@ -196,14 +154,7 @@ export class PackageManagerViewStateManager {
|
|||
// Update state and notify
|
||||
this.state = newState
|
||||
|
||||
console.log("After state update:", {
|
||||
isFetching: this.state.isFetching,
|
||||
allItems: this.state.allItems.length,
|
||||
firstItem: this.state.allItems[0],
|
||||
})
|
||||
|
||||
this.notifyStateChange()
|
||||
console.log("=== FETCH_COMPLETE Finished ===")
|
||||
break
|
||||
}
|
||||
|
||||
|
|
@ -261,11 +212,6 @@ export class PackageManagerViewStateManager {
|
|||
|
||||
case "UPDATE_FILTERS": {
|
||||
const { filters = {} } = (transition.payload as TransitionPayloads["UPDATE_FILTERS"]) || {}
|
||||
console.log("=== UPDATE_FILTERS Started ===", {
|
||||
currentFilters: this.state.filters,
|
||||
newFilters: filters,
|
||||
})
|
||||
|
||||
// Create new filters object, preserving existing filters unless explicitly changed
|
||||
const updatedFilters = {
|
||||
type: filters.type ?? this.state.filters.type,
|
||||
|
|
@ -286,7 +232,6 @@ export class PackageManagerViewStateManager {
|
|||
filters: updatedFilters,
|
||||
} as WebviewMessage)
|
||||
|
||||
console.log("=== UPDATE_FILTERS Finished ===")
|
||||
break
|
||||
}
|
||||
|
||||
|
|
@ -421,30 +366,8 @@ export class PackageManagerViewStateManager {
|
|||
}
|
||||
|
||||
public async handleMessage(message: any): Promise<void> {
|
||||
console.log("=== Handling Message ===", {
|
||||
messageType: message.type,
|
||||
hasPackageManagerItems: !!message.state?.packageManagerItems,
|
||||
itemsLength: message.state?.packageManagerItems?.length,
|
||||
currentState: {
|
||||
isFetching: this.state.isFetching,
|
||||
itemCount: this.state.allItems.length,
|
||||
},
|
||||
})
|
||||
|
||||
// Handle state updates from extension
|
||||
if (message.type === "state") {
|
||||
console.log("Processing state update:", {
|
||||
isFetching: message.state?.isFetching,
|
||||
itemCount: message.state?.packageManagerItems?.length,
|
||||
firstItem: message.state?.packageManagerItems?.[0],
|
||||
sources: message.state?.sources,
|
||||
currentState: {
|
||||
isFetching: this.state.isFetching,
|
||||
itemCount: this.state.allItems.length,
|
||||
sources: this.state.sources,
|
||||
},
|
||||
})
|
||||
|
||||
// Update sources from either sources or packageManagerSources in state
|
||||
if (message.state?.sources || message.state?.packageManagerSources) {
|
||||
const sources = message.state.packageManagerSources || message.state.sources
|
||||
|
|
@ -453,7 +376,6 @@ export class PackageManagerViewStateManager {
|
|||
}
|
||||
|
||||
if (message.state?.packageManagerItems) {
|
||||
console.log("State includes items, transitioning to FETCH_COMPLETE")
|
||||
void this.transition({
|
||||
type: "FETCH_COMPLETE",
|
||||
payload: { items: message.state.packageManagerItems },
|
||||
|
|
|
|||
|
|
@ -2,46 +2,16 @@ import { useState, useEffect } from "react"
|
|||
import { PackageManagerViewStateManager, ViewState } from "./PackageManagerViewStateManager"
|
||||
|
||||
export function useStateManager() {
|
||||
const [manager] = useState(() => {
|
||||
console.log("=== Creating PackageManagerViewStateManager ===")
|
||||
return new PackageManagerViewStateManager()
|
||||
})
|
||||
const [manager] = useState(() => new PackageManagerViewStateManager())
|
||||
|
||||
const [state, setState] = useState(() => {
|
||||
const initialState = manager.getState()
|
||||
console.log("=== Initializing State ===", {
|
||||
allItems: initialState.allItems,
|
||||
itemsLength: initialState.allItems.length,
|
||||
isFetching: initialState.isFetching,
|
||||
activeTab: initialState.activeTab,
|
||||
})
|
||||
return initialState
|
||||
})
|
||||
const [state, setState] = useState(() => manager.getState())
|
||||
|
||||
useEffect(() => {
|
||||
console.log("=== Setting up state change subscription and message listener ===")
|
||||
let updateCount = 0
|
||||
|
||||
const handleStateChange = (newState: ViewState) => {
|
||||
updateCount++
|
||||
console.log(`=== State Update #${updateCount} Received ===`, {
|
||||
allItems: newState.allItems,
|
||||
itemsLength: newState.allItems.length,
|
||||
isFetching: newState.isFetching,
|
||||
activeTab: newState.activeTab,
|
||||
previousFetching: state.isFetching,
|
||||
stateChanged: JSON.stringify(newState) !== JSON.stringify(state),
|
||||
})
|
||||
setState(newState)
|
||||
}
|
||||
|
||||
const handleMessage = (event: MessageEvent) => {
|
||||
console.log("=== Message Event Received ===", {
|
||||
type: event.data?.type,
|
||||
hasState: !!event.data?.state,
|
||||
isFetching: event.data?.state?.isFetching,
|
||||
itemCount: event.data?.state?.packageManagerItems?.length,
|
||||
})
|
||||
manager.handleMessage(event.data)
|
||||
}
|
||||
|
||||
|
|
@ -49,7 +19,6 @@ export function useStateManager() {
|
|||
const unsubscribe = manager.onStateChange(handleStateChange)
|
||||
|
||||
return () => {
|
||||
console.log(`=== Cleaning up state manager (processed ${updateCount} updates) ===`)
|
||||
window.removeEventListener("message", handleMessage)
|
||||
unsubscribe()
|
||||
manager.cleanup()
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue