|
| 1 | +# Browser-Based Development Playground - Feature Summary |
| 2 | + |
| 3 | +## 🎯 Overview |
| 4 | + |
| 5 | +This feature enables developers to browse, edit, and test ObjectQL projects directly in the browser, similar to shadcn's interactive documentation approach. No local IDE setup required! |
| 6 | + |
| 7 | +## 🚀 What's New |
| 8 | + |
| 9 | +### 1. Development API Handler (`@objectql/server`) |
| 10 | + |
| 11 | +A new `createDevHandler()` function provides RESTful endpoints for file system operations: |
| 12 | + |
| 13 | +```typescript |
| 14 | +import { createDevHandler } from '@objectql/server'; |
| 15 | + |
| 16 | +const devHandler = createDevHandler({ |
| 17 | + enabled: process.env.NODE_ENV === 'development', // Must be explicitly enabled |
| 18 | + baseDir: process.cwd() |
| 19 | +}); |
| 20 | +``` |
| 21 | + |
| 22 | +**Endpoints:** |
| 23 | +- `GET /api/dev/files` - List project files |
| 24 | +- `GET /api/dev/files/:path` - Read file content |
| 25 | +- `PUT /api/dev/files/:path` - Update file |
| 26 | +- `POST /api/dev/files` - Create file |
| 27 | +- `DELETE /api/dev/files/:path` - Delete file |
| 28 | +- `GET /api/dev/metadata` - Get ObjectQL metadata |
| 29 | + |
| 30 | +### 2. Browser-Based IDE |
| 31 | + |
| 32 | +A complete web-based development environment (`examples/integrations/dev-playground`): |
| 33 | + |
| 34 | +**Features:** |
| 35 | +- 📁 **File Browser**: Tree view with folder navigation |
| 36 | +- ✏️ **Code Editor**: Multi-tab editing with syntax highlighting |
| 37 | +- 🧪 **API Playground**: Test CRUD operations interactively |
| 38 | +- 💾 **Auto-save**: Keyboard shortcuts (Ctrl+S / Cmd+S) |
| 39 | +- 🔄 **Live Reload**: Real-time file tree updates |
| 40 | + |
| 41 | +## 🔒 Security |
| 42 | + |
| 43 | +**Secure by Default:** |
| 44 | +- ❌ Disabled unless explicitly enabled |
| 45 | +- ✅ File operations restricted to `src/` directory |
| 46 | +- ✅ File type whitelist (.yml, .ts, .js, .json, .md) |
| 47 | +- ✅ Path traversal protection |
| 48 | +- ✅ CORS configuration support |
| 49 | + |
| 50 | +**Test Coverage:** |
| 51 | +- 20 unit tests (all passing) |
| 52 | +- CodeQL analysis: 0 vulnerabilities |
| 53 | + |
| 54 | +## 📖 Use Cases |
| 55 | + |
| 56 | +### 1. Remote Development |
| 57 | +Work on ObjectQL projects from any device - Chromebooks, tablets, cloud IDEs. |
| 58 | + |
| 59 | +### 2. Live Workshops |
| 60 | +Teach ObjectQL with live code editing and immediate API testing. |
| 61 | + |
| 62 | +### 3. Rapid Prototyping |
| 63 | +Quickly iterate on object definitions and test them instantly. |
| 64 | + |
| 65 | +### 4. Code Review |
| 66 | +Review ObjectQL metadata files in a collaborative browser environment. |
| 67 | + |
| 68 | +### 5. Documentation |
| 69 | +Embed live, editable examples in documentation sites. |
| 70 | + |
| 71 | +## 🎬 Getting Started |
| 72 | + |
| 73 | +```bash |
| 74 | +# Clone the example |
| 75 | +cd examples/integrations/dev-playground |
| 76 | + |
| 77 | +# Install dependencies |
| 78 | +pnpm install |
| 79 | + |
| 80 | +# Start the backend server (port 3000) |
| 81 | +pnpm run server |
| 82 | + |
| 83 | +# In another terminal, start the frontend (port 5173) |
| 84 | +pnpm run dev |
| 85 | + |
| 86 | +# Open http://localhost:5173 in your browser |
| 87 | +``` |
| 88 | + |
| 89 | +## 📂 Project Structure |
| 90 | + |
| 91 | +``` |
| 92 | +examples/integrations/dev-playground/ |
| 93 | +├── src/ |
| 94 | +│ └── objects/ # Sample ObjectQL definitions |
| 95 | +│ ├── project.object.yml |
| 96 | +│ └── task.object.yml |
| 97 | +├── index.html # Browser UI |
| 98 | +├── server.ts # Node.js backend |
| 99 | +├── package.json |
| 100 | +└── README.md # Full documentation |
| 101 | +``` |
| 102 | + |
| 103 | +## 🔧 Integration |
| 104 | + |
| 105 | +Add to your existing ObjectQL project: |
| 106 | + |
| 107 | +```typescript |
| 108 | +import http from 'http'; |
| 109 | +import { createDevHandler, createRESTHandler } from '@objectql/server'; |
| 110 | +import { ObjectQL } from '@objectql/core'; |
| 111 | + |
| 112 | +const app = new ObjectQL({ /* ... */ }); |
| 113 | +const devHandler = createDevHandler({ enabled: true }); |
| 114 | +const restHandler = createRESTHandler(app); |
| 115 | + |
| 116 | +const server = http.createServer(async (req, res) => { |
| 117 | + if (req.url?.startsWith('/api/dev/')) { |
| 118 | + await devHandler(req, res); |
| 119 | + } else if (req.url?.startsWith('/api/data/')) { |
| 120 | + await restHandler(req, res); |
| 121 | + } |
| 122 | +}); |
| 123 | + |
| 124 | +server.listen(3000); |
| 125 | +``` |
| 126 | + |
| 127 | +## 📊 Technical Details |
| 128 | + |
| 129 | +### Files Changed |
| 130 | +- `packages/runtime/server/src/dev-handler.ts` - New handler (600+ lines) |
| 131 | +- `packages/runtime/server/src/index.ts` - Export dev handler |
| 132 | +- `packages/runtime/server/test/dev-handler.test.ts` - Tests (300+ lines) |
| 133 | +- `examples/integrations/dev-playground/` - Example app (800+ lines) |
| 134 | +- `README.md` - Documentation updates |
| 135 | + |
| 136 | +### Dependencies |
| 137 | +- No new production dependencies |
| 138 | +- Uses existing Node.js APIs (fs, path, http) |
| 139 | +- Vite for frontend dev server (dev dependency) |
| 140 | + |
| 141 | +## 🎨 UI Features |
| 142 | + |
| 143 | +### File Browser |
| 144 | +- Expandable/collapsible folders |
| 145 | +- File type icons |
| 146 | +- Real-time refresh |
| 147 | +- Modified indicator |
| 148 | + |
| 149 | +### Code Editor |
| 150 | +- Multi-tab interface |
| 151 | +- Syntax highlighting for YAML, TS, JSON |
| 152 | +- Modified file indicators (•) |
| 153 | +- Close tab functionality |
| 154 | +- Auto-save on Ctrl+S |
| 155 | + |
| 156 | +### API Playground |
| 157 | +- Object selector (auto-populated) |
| 158 | +- Operation selector (find, create, update, etc.) |
| 159 | +- JSON argument editor |
| 160 | +- Formatted response viewer |
| 161 | +- Error handling with visual feedback |
| 162 | + |
| 163 | +## 🌟 Future Enhancements |
| 164 | + |
| 165 | +Potential additions: |
| 166 | +- Monaco Editor integration for advanced editing |
| 167 | +- Git integration (commit, push, pull) |
| 168 | +- Multi-user collaboration |
| 169 | +- Terminal emulator |
| 170 | +- Database query builder |
| 171 | +- Real-time validation feedback |
| 172 | + |
| 173 | +## 📄 License |
| 174 | + |
| 175 | +MIT - Same as ObjectQL |
| 176 | + |
| 177 | +## 👥 Credits |
| 178 | + |
| 179 | +Inspired by: |
| 180 | +- shadcn/ui's interactive documentation |
| 181 | +- VS Code's web-based editor |
| 182 | +- CodeSandbox's online IDE |
| 183 | + |
| 184 | +--- |
| 185 | + |
| 186 | +**Ready to ship! 🚀** |
| 187 | +All tests passing, no security vulnerabilities, comprehensive documentation. |
0 commit comments