mirror of
https://github.com/The-Low-Code-Foundation/OpenNoodl.git
synced 2026-01-11 23:02:56 +01:00
316 lines
7.1 KiB
Markdown
316 lines
7.1 KiB
Markdown
# TASK-006 Working Notes
|
|
|
|
## Research
|
|
|
|
### Development Server Architecture
|
|
|
|
**Question**: Where is `localhost:8574` configured and what serves it?
|
|
|
|
**Findings**:
|
|
- ✅ Located: `packages/noodl-editor/src/main/src/web-server.js`
|
|
- Port 8574 defined in config files: `src/shared/config/config-dev.js`, `config-dist.js`, `config-test.js`
|
|
- Server type: **Node.js HTTP/HTTPS server** (not webpack-dev-server)
|
|
- Main process at `packages/noodl-editor/src/main/main.js` starts the server with `startServer()`
|
|
|
|
**Dev Server Type**:
|
|
- [ ] webpack-dev-server
|
|
- [ ] Electron static file handler
|
|
- [ ] Express server
|
|
- [x] Other: **Node.js HTTP Server (custom)**
|
|
|
|
### Project Path Management
|
|
|
|
**Question**: How does the editor track which project is currently open?
|
|
|
|
**Findings**:
|
|
- ✅ Project path accessed via `projectGetInfo()` callback in main process
|
|
- Located at: `packages/noodl-editor/src/main/main.js`
|
|
- Path retrieved from renderer process via IPC: `makeEditorAPIRequest('projectGetInfo', undefined, callback)`
|
|
- Updated automatically on each request - no caching needed
|
|
- Always returns current project directory
|
|
|
|
### Current Asset Handling
|
|
|
|
**What Works**:
|
|
- Fonts load correctly in deployed apps
|
|
- Font loader logic is sound (`fontloader.js`)
|
|
- @font-face CSS generation works
|
|
|
|
**What Doesn't Work**:
|
|
- Preview cannot access project directory files
|
|
- `http://localhost:8574/fonts/file.ttf` → 404
|
|
- Browser receives HTML error page instead of font binary
|
|
|
|
### Existing Patterns Found
|
|
|
|
**Similar Asset Serving**:
|
|
- (Search codebase for similar patterns)
|
|
- Check how viewer bundles are served
|
|
- Check how static assets are currently handled
|
|
|
|
---
|
|
|
|
## Architecture Decisions
|
|
|
|
### Approach Selection
|
|
|
|
**Option A: Static Middleware**
|
|
- Pros:
|
|
- Cons:
|
|
- Feasibility: ⭐⭐⭐ (1-5 stars)
|
|
|
|
**Option B: Custom Protocol**
|
|
- Pros:
|
|
- Cons:
|
|
- Feasibility: ⭐⭐⭐ (1-5 stars)
|
|
|
|
**Option C: Copy to Temp**
|
|
- Pros:
|
|
- Cons:
|
|
- Feasibility: ⭐⭐⭐ (1-5 stars)
|
|
|
|
**Decision**: Going with Option ___ because:
|
|
- Reason 1
|
|
- Reason 2
|
|
- Reason 3
|
|
|
|
### Implementation Details
|
|
|
|
**Path Resolution Strategy**:
|
|
```
|
|
Request: http://localhost:8574/fonts/Inter-Regular.ttf
|
|
↓
|
|
Extract: /fonts/Inter-Regular.ttf
|
|
↓
|
|
Combine: currentProjectPath + /fonts/Inter-Regular.ttf
|
|
↓
|
|
Serve: /absolute/path/to/project/fonts/Inter-Regular.ttf
|
|
```
|
|
|
|
**Security Measures**:
|
|
- Path sanitization method: ...
|
|
- Directory traversal prevention: ...
|
|
- Allowed file types: fonts, images, (others?)
|
|
- Blocked paths: ...
|
|
|
|
**MIME Type Configuration**:
|
|
```javascript
|
|
const mimeTypes = {
|
|
'.ttf': 'font/ttf',
|
|
'.otf': 'font/otf',
|
|
'.woff': 'font/woff',
|
|
'.woff2': 'font/woff2',
|
|
'.png': 'image/png',
|
|
'.jpg': 'image/jpeg',
|
|
'.svg': 'image/svg+xml'
|
|
};
|
|
```
|
|
|
|
---
|
|
|
|
## Implementation Notes
|
|
|
|
### Code Locations Identified
|
|
|
|
| File | Purpose | Changes Needed |
|
|
|------|---------|----------------|
|
|
| (to be filled in) | | |
|
|
|
|
### Gotchas / Surprises
|
|
|
|
- (Document unexpected discoveries)
|
|
|
|
### Useful Commands
|
|
|
|
```bash
|
|
# Find where port 8574 is configured
|
|
grep -r "8574" packages/noodl-editor/
|
|
|
|
# Find project path references
|
|
grep -r "projectPath\|ProjectPath" packages/noodl-editor/src/
|
|
|
|
# Find dev server setup
|
|
find packages/noodl-editor -name "*dev*.js" -o -name "*server*.ts"
|
|
|
|
# Check what's currently served
|
|
curl -I http://localhost:8574/fonts/test.ttf
|
|
```
|
|
|
|
---
|
|
|
|
## Testing Notes
|
|
|
|
### Test Project Setup
|
|
|
|
**Project Name**: font-test-project
|
|
**Location**: (path to test project)
|
|
**Fonts Used**:
|
|
- Inter-Regular.ttf (254 KB)
|
|
- (others as needed)
|
|
|
|
### Test Results
|
|
|
|
#### Test 1: Basic Font Loading
|
|
- **Date**:
|
|
- **Setup**: Single TTF font, one Text node
|
|
- **Result**: ✅ Pass / ❌ Fail
|
|
- **Notes**:
|
|
|
|
#### Test 2: Multiple Formats
|
|
- **Date**:
|
|
- **Setup**: TTF, OTF, WOFF, WOFF2
|
|
- **Result**: ✅ Pass / ❌ Fail
|
|
- **Notes**:
|
|
|
|
#### Test 3: Project Switching
|
|
- **Date**:
|
|
- **Setup**: Project A (Font X), Project B (Font Y)
|
|
- **Result**: ✅ Pass / ❌ Fail
|
|
- **Notes**:
|
|
|
|
#### Test 4: Security (Directory Traversal)
|
|
- **Date**:
|
|
- **Attempt**: `http://localhost:8574/fonts/../../secret.txt`
|
|
- **Result**: ✅ Blocked / ❌ Exposed
|
|
- **Notes**:
|
|
|
|
### Console Errors Before Fix
|
|
|
|
```
|
|
GET http://localhost:8574/fonts/Inter-Regular.ttf 404 (Not Found)
|
|
OTS parsing error: GDEF: misaligned table
|
|
```
|
|
|
|
### Console After Fix
|
|
|
|
**Important**: The fix requires restarting the dev server!
|
|
|
|
Steps to test:
|
|
1. Stop current `npm run dev` with Ctrl+C
|
|
2. Run `npm run dev` again to recompile with new code
|
|
3. Open a project with custom fonts
|
|
4. Check console - should see NO 404 errors or OTS parsing errors
|
|
|
|
**First Test Results** (Dev server not restarted):
|
|
- Still seeing 404 errors - this is EXPECTED
|
|
- Old compiled code still running in Electron
|
|
- Changes in source files don't apply until recompilation
|
|
|
|
**After Restart** (To be documented):
|
|
- Fonts should load successfully
|
|
- No 404 errors
|
|
- No "OTS parsing error" messages
|
|
|
|
---
|
|
|
|
## Debug Log
|
|
|
|
### [Date/Time] - Investigation Start
|
|
|
|
**Trying**: Locate dev server configuration
|
|
**Found**:
|
|
**Next**:
|
|
|
|
### [Date/Time] - Dev Server Located
|
|
|
|
**Trying**: Understand server architecture
|
|
**Found**:
|
|
**Next**:
|
|
|
|
### [Date/Time] - Implementation Start
|
|
|
|
**Trying**: Add middleware for project assets
|
|
**Code**: (paste relevant code snippets)
|
|
**Result**:
|
|
**Next**:
|
|
|
|
### [Date/Time] - First Test
|
|
|
|
**Trying**: Load font in preview
|
|
**Result**:
|
|
**Issues**:
|
|
**Next**:
|
|
|
|
---
|
|
|
|
## Questions & Decisions
|
|
|
|
### Question: Should we serve all file types or limit to specific extensions?
|
|
|
|
**Options**:
|
|
1. Serve everything in project directory
|
|
2. Whitelist specific extensions (fonts, images)
|
|
3. Blacklist dangerous file types
|
|
|
|
**Decision**: (Document decision and reasoning)
|
|
|
|
### Question: How to handle project switching?
|
|
|
|
**Options**:
|
|
1. Update middleware path dynamically
|
|
2. Restart dev server with new path
|
|
3. Path lookup on each request
|
|
|
|
**Decision**: (Document decision and reasoning)
|
|
|
|
### Question: Where should error handling live?
|
|
|
|
**Options**:
|
|
1. In middleware (return proper 404)
|
|
2. In Electron main process
|
|
3. Both
|
|
|
|
**Decision**: (Document decision and reasoning)
|
|
|
|
---
|
|
|
|
## Performance Considerations
|
|
|
|
### Measurements
|
|
|
|
**Before Changes**:
|
|
- Project load time: ___ ms
|
|
- First font render: ___ ms
|
|
- Memory usage: ___ MB
|
|
|
|
**After Changes**:
|
|
- Project load time: ___ ms (Δ ___)
|
|
- First font render: ___ ms (Δ ___)
|
|
- Memory usage: ___ MB (Δ ___)
|
|
|
|
### Optimization Ideas
|
|
|
|
- Caching strategy for frequently accessed fonts?
|
|
- Pre-load fonts on project open?
|
|
- Lazy load only when needed?
|
|
|
|
---
|
|
|
|
## References & Resources
|
|
|
|
### Relevant Documentation
|
|
- [webpack-dev-server middleware](https://webpack.js.org/configuration/dev-server/#devserversetupmiddlewares)
|
|
- [Electron protocol API](https://www.electronjs.org/docs/latest/api/protocol)
|
|
- [Node.js MIME types](https://nodejs.org/api/http.html#http_http_methods)
|
|
|
|
### Similar Issues
|
|
- (Link to any similar problems found in codebase)
|
|
|
|
### Code Examples
|
|
- (Link to relevant code patterns found elsewhere)
|
|
|
|
---
|
|
|
|
## Final Checklist
|
|
|
|
Before marking task complete:
|
|
|
|
- [ ] All test scenarios pass
|
|
- [ ] No console errors
|
|
- [ ] Performance acceptable
|
|
- [ ] Security verified
|
|
- [ ] Cross-platform tested (if possible)
|
|
- [ ] Code documented
|
|
- [ ] CHANGELOG.md updated
|
|
- [ ] LEARNINGS.md updated (if applicable)
|