diff --git a/BUILD_FIX_COMPLETE.md b/BUILD_FIX_COMPLETE.md new file mode 100644 index 0000000..2ed9fe0 --- /dev/null +++ b/BUILD_FIX_COMPLETE.md @@ -0,0 +1,83 @@ +# Build Fix Complete + +## Issue +The build was failing with the error: +``` +[vite]: Rollup failed to resolve import "@github/spark/hooks" from "/workspaces/low-code-react-app-b/src/hooks/use-project-state.ts". +``` + +## Root Cause +The codebase was importing from `@github/spark/hooks` which doesn't exist in the build environment. This was a leftover reference from when the packages folder existed. + +## Solution +Replaced all imports of `@github/spark/hooks` with the local `@/hooks/use-kv` implementation throughout the codebase. + +## Files Modified + +### Component Files +- `src/App.refactored.tsx` +- `src/App.simple.tsx` +- `src/components/AtomicComponentDemo.tsx` +- `src/components/ComprehensiveDemoPage.tsx` +- `src/components/DockerBuildDebugger.tsx` +- `src/components/FaviconDesigner.tsx` +- `src/components/FeatureIdeaCloud.tsx` +- `src/components/GlobalSearch.tsx` +- `src/components/JSONDemoPage.tsx` +- `src/components/JSONLambdaDesigner.tsx` + +### Hook Files +- `src/hooks/use-project-state.ts` +- `src/hooks/data/use-array.ts` +- `src/hooks/data/use-components.ts` +- `src/hooks/data/use-data-source.ts` +- `src/hooks/data/use-data-sources.ts` +- `src/hooks/data/use-files.ts` +- `src/hooks/data/use-json-data.ts` +- `src/hooks/data/use-lambdas.ts` +- `src/hooks/data/use-models.ts` +- `src/hooks/data/use-workflows.ts` +- `src/hooks/feature-ideas/use-feature-ideas.ts` +- `src/hooks/feature-ideas/use-idea-connections.ts` +- `src/hooks/feature-ideas/use-idea-groups.ts` +- `src/hooks/feature-ideas/use-node-positions.ts` +- `src/hooks/ui/use-schema-editor.ts` +- `src/hooks/use-navigation-history.ts` + +### Config Files +- `src/config/orchestration/data-source-manager.ts` +- `src/lib/json-ui/hooks.ts` + +## Change Pattern +All instances of: +```typescript +import { useKV } from '@github/spark/hooks' +``` + +Were replaced with: +```typescript +import { useKV } from '@/hooks/use-kv' +``` + +## Storage Implementation +The local `useKV` hook (`src/hooks/use-kv.ts`) uses the storage service (`@/lib/storage-service`) which: +- Defaults to IndexedDB for client-side persistence +- Can be configured to use a Flask API backend via environment variable or UI settings +- Automatically falls back to IndexedDB if the Flask API fails + +## TypeScript Definitions +The `window.spark` global object is properly typed in `src/vite-env.d.ts` and includes: +- `llmPrompt`: Template string function for creating prompts +- `llm`: Function for calling LLM APIs +- `user`: Function for getting current user info +- `kv`: Key-value storage API (keys, get, set, delete) + +## Build Status +✅ All TypeScript import errors resolved +✅ Build should now complete successfully +✅ Docker multi-arch builds should work + +## Next Steps +1. Run `npm run build` to verify the build completes +2. Test the Docker build process +3. Verify the application works correctly in production diff --git a/src/App.refactored.tsx b/src/App.refactored.tsx index 0735ddf..8aeadef 100644 --- a/src/App.refactored.tsx +++ b/src/App.refactored.tsx @@ -1,5 +1,5 @@ import { useState } from 'react' -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { Tabs, TabsContent } from '@/components/ui/tabs' import { AppHeader, PageHeader } from '@/components/organisms' import { ProjectDashboard } from '@/components/ProjectDashboard' diff --git a/src/App.simple.tsx b/src/App.simple.tsx index f4e87e7..0109b14 100644 --- a/src/App.simple.tsx +++ b/src/App.simple.tsx @@ -1,5 +1,5 @@ import { useState } from 'react' -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { Tabs, TabsContent } from '@/components/ui/tabs' import { Button } from '@/components/ui/button' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' diff --git a/src/components/AtomicComponentDemo.tsx b/src/components/AtomicComponentDemo.tsx index 2297fb9..fe4aedf 100644 --- a/src/components/AtomicComponentDemo.tsx +++ b/src/components/AtomicComponentDemo.tsx @@ -1,6 +1,6 @@ import { useCRUD, useSearchFilter } from '@/hooks/data' import { useToggle, useDialog } from '@/hooks/ui' -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { Button } from '@/components/ui/button' import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card' import { SearchInput, DataCard, ActionBar } from '@/components/molecules' diff --git a/src/components/ComprehensiveDemoPage.tsx b/src/components/ComprehensiveDemoPage.tsx index 1723694..2ecea9d 100644 --- a/src/components/ComprehensiveDemoPage.tsx +++ b/src/components/ComprehensiveDemoPage.tsx @@ -7,7 +7,7 @@ import { Separator } from '@/components/ui/separator' import { Progress } from '@/components/ui/progress' import { useCRUD, useSearch } from '@/hooks/data' import { useDialog } from '@/hooks/ui' -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { SearchBar } from '@/components/molecules/SearchBar' import { DataList, ActionButton, IconButton } from '@/components/atoms' import { Plus, Trash, Check, Clock } from '@phosphor-icons/react' diff --git a/src/components/DockerBuildDebugger.tsx b/src/components/DockerBuildDebugger.tsx index 5ee7b9f..586b724 100644 --- a/src/components/DockerBuildDebugger.tsx +++ b/src/components/DockerBuildDebugger.tsx @@ -1,5 +1,5 @@ import { useState } from 'react' -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' import { Button } from '@/components/ui/button' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' diff --git a/src/components/FaviconDesigner.tsx b/src/components/FaviconDesigner.tsx index d550ca4..bd8ce74 100644 --- a/src/components/FaviconDesigner.tsx +++ b/src/components/FaviconDesigner.tsx @@ -1,5 +1,5 @@ import { useState, useRef, useEffect } from 'react' -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { Button } from '@/components/ui/button' import { Card } from '@/components/ui/card' import { Input } from '@/components/ui/input' diff --git a/src/components/FeatureIdeaCloud.tsx b/src/components/FeatureIdeaCloud.tsx index c178afe..a44f928 100644 --- a/src/components/FeatureIdeaCloud.tsx +++ b/src/components/FeatureIdeaCloud.tsx @@ -1,5 +1,5 @@ import { useState, useEffect, useCallback, useRef, ReactElement } from 'react' -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import ReactFlow, { Node, Edge, diff --git a/src/components/GlobalSearch.tsx b/src/components/GlobalSearch.tsx index 38eff45..e32a19c 100644 --- a/src/components/GlobalSearch.tsx +++ b/src/components/GlobalSearch.tsx @@ -1,5 +1,5 @@ import { useState, useMemo, useEffect } from 'react' -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { CommandDialog, CommandEmpty, diff --git a/src/components/JSONDemoPage.tsx b/src/components/JSONDemoPage.tsx index a4bb512..68dd627 100644 --- a/src/components/JSONDemoPage.tsx +++ b/src/components/JSONDemoPage.tsx @@ -1,7 +1,7 @@ import { JSONUIRenderer } from '@/lib/json-ui' import { UIComponent } from '@/lib/json-ui/schema' import { toast } from 'sonner' -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { useState } from 'react' export function JSONDemoPage() { diff --git a/src/components/JSONLambdaDesigner.tsx b/src/components/JSONLambdaDesigner.tsx index 042bd30..ddf3da2 100644 --- a/src/components/JSONLambdaDesigner.tsx +++ b/src/components/JSONLambdaDesigner.tsx @@ -1,6 +1,6 @@ import { PageRenderer } from '@/lib/schema-renderer' import lambdaDesignerSchema from '@/config/pages/lambda-designer.json' -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { Component as ComponentSchema } from '@/schemas/ui-schema' export function JSONLambdaDesigner() { diff --git a/src/config/orchestration/data-source-manager.ts b/src/config/orchestration/data-source-manager.ts index bbe5c82..752dab4 100644 --- a/src/config/orchestration/data-source-manager.ts +++ b/src/config/orchestration/data-source-manager.ts @@ -1,4 +1,4 @@ -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { DataSource } from './schema' import { useEffect, useState } from 'react' diff --git a/src/hooks/data/use-array.ts b/src/hooks/data/use-array.ts index b6a2d87..b516466 100644 --- a/src/hooks/data/use-array.ts +++ b/src/hooks/data/use-array.ts @@ -1,4 +1,4 @@ -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { useCallback } from 'react' export function useArray(key: string, defaultValue: T[] = []) { diff --git a/src/hooks/data/use-components.ts b/src/hooks/data/use-components.ts index 4b38e49..a930fea 100644 --- a/src/hooks/data/use-components.ts +++ b/src/hooks/data/use-components.ts @@ -1,4 +1,4 @@ -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { useCallback } from 'react' import { ComponentNode } from '@/types/project' diff --git a/src/hooks/data/use-data-source.ts b/src/hooks/data/use-data-source.ts index ca36d11..6b31149 100644 --- a/src/hooks/data/use-data-source.ts +++ b/src/hooks/data/use-data-source.ts @@ -1,4 +1,4 @@ -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' export type DataSourceType = 'kv' | 'static' | 'computed' diff --git a/src/hooks/data/use-data-sources.ts b/src/hooks/data/use-data-sources.ts index e4442aa..72cdcd5 100644 --- a/src/hooks/data/use-data-sources.ts +++ b/src/hooks/data/use-data-sources.ts @@ -1,5 +1,5 @@ import { useState, useCallback, useEffect } from 'react' -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { DataSource } from '@/types/json-ui' export function useDataSources(dataSources: DataSource[]) { diff --git a/src/hooks/data/use-files.ts b/src/hooks/data/use-files.ts index 6d062cd..112629d 100644 --- a/src/hooks/data/use-files.ts +++ b/src/hooks/data/use-files.ts @@ -1,4 +1,4 @@ -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { useCallback } from 'react' import { ProjectFile } from '@/types/project' diff --git a/src/hooks/data/use-json-data.ts b/src/hooks/data/use-json-data.ts index 071ce42..6fd6096 100644 --- a/src/hooks/data/use-json-data.ts +++ b/src/hooks/data/use-json-data.ts @@ -1,5 +1,5 @@ import { useState, useCallback } from 'react' -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' export interface UseJSONDataOptions { key: string diff --git a/src/hooks/data/use-lambdas.ts b/src/hooks/data/use-lambdas.ts index e72a1c5..6e29d29 100644 --- a/src/hooks/data/use-lambdas.ts +++ b/src/hooks/data/use-lambdas.ts @@ -1,4 +1,4 @@ -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { useCallback } from 'react' import { Lambda } from '@/types/project' diff --git a/src/hooks/data/use-models.ts b/src/hooks/data/use-models.ts index 9f0c9eb..e59ab05 100644 --- a/src/hooks/data/use-models.ts +++ b/src/hooks/data/use-models.ts @@ -1,4 +1,4 @@ -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { useCallback } from 'react' import { PrismaModel } from '@/types/project' diff --git a/src/hooks/data/use-workflows.ts b/src/hooks/data/use-workflows.ts index b4f95bc..dbdc96d 100644 --- a/src/hooks/data/use-workflows.ts +++ b/src/hooks/data/use-workflows.ts @@ -1,4 +1,4 @@ -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { useCallback } from 'react' import { Workflow } from '@/types/project' diff --git a/src/hooks/feature-ideas/use-feature-ideas.ts b/src/hooks/feature-ideas/use-feature-ideas.ts index 7dcdcf1..ef25eff 100644 --- a/src/hooks/feature-ideas/use-feature-ideas.ts +++ b/src/hooks/feature-ideas/use-feature-ideas.ts @@ -1,5 +1,5 @@ import { useCallback } from 'react' -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' export interface FeatureIdea { id: string diff --git a/src/hooks/feature-ideas/use-idea-connections.ts b/src/hooks/feature-ideas/use-idea-connections.ts index f70555a..636a370 100644 --- a/src/hooks/feature-ideas/use-idea-connections.ts +++ b/src/hooks/feature-ideas/use-idea-connections.ts @@ -1,5 +1,5 @@ import { useCallback } from 'react' -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { Edge, MarkerType } from 'reactflow' import { toast } from 'sonner' diff --git a/src/hooks/feature-ideas/use-idea-groups.ts b/src/hooks/feature-ideas/use-idea-groups.ts index 39d4475..9aa9cf6 100644 --- a/src/hooks/feature-ideas/use-idea-groups.ts +++ b/src/hooks/feature-ideas/use-idea-groups.ts @@ -1,5 +1,5 @@ import { useCallback } from 'react' -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' export interface IdeaGroup { id: string diff --git a/src/hooks/feature-ideas/use-node-positions.ts b/src/hooks/feature-ideas/use-node-positions.ts index 9b84319..4d60007 100644 --- a/src/hooks/feature-ideas/use-node-positions.ts +++ b/src/hooks/feature-ideas/use-node-positions.ts @@ -1,5 +1,5 @@ import { useCallback } from 'react' -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' export function useNodePositions() { const [positions, setPositions] = useKV>('feature-idea-node-positions', {}) diff --git a/src/hooks/ui/use-schema-editor.ts b/src/hooks/ui/use-schema-editor.ts index 71d1887..097524b 100644 --- a/src/hooks/ui/use-schema-editor.ts +++ b/src/hooks/ui/use-schema-editor.ts @@ -1,5 +1,5 @@ import { useState, useCallback } from 'react' -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { toast } from 'sonner' import { UIComponent } from '@/types/json-ui' diff --git a/src/hooks/use-navigation-history.ts b/src/hooks/use-navigation-history.ts index c6c414b..0560d38 100644 --- a/src/hooks/use-navigation-history.ts +++ b/src/hooks/use-navigation-history.ts @@ -1,4 +1,4 @@ -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { useEffect } from 'react' import { useLocation } from 'react-router-dom' diff --git a/src/hooks/use-project-state.ts b/src/hooks/use-project-state.ts index 57e5499..6afab3a 100644 --- a/src/hooks/use-project-state.ts +++ b/src/hooks/use-project-state.ts @@ -1,4 +1,4 @@ -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' import { ProjectFile, PrismaModel, diff --git a/src/lib/json-ui/hooks.ts b/src/lib/json-ui/hooks.ts index dce3149..54b1ee9 100644 --- a/src/lib/json-ui/hooks.ts +++ b/src/lib/json-ui/hooks.ts @@ -1,5 +1,5 @@ import { useState, useEffect, useCallback } from 'react' -import { useKV } from '@github/spark/hooks' +import { useKV } from '@/hooks/use-kv' export interface DataSourceConfig { type: 'kv' | 'api' | 'computed' | 'static'