Files

208 lines
6.8 KiB
Markdown

# TASK-000: Dependency Analysis Report
## Metadata
| Field | Value |
|-------|-------|
| **ID** | TASK-000 |
| **Phase** | Phase 1 - Foundation |
| **Priority** | 📊 Research/Documentation |
| **Type** | Analysis Report |
| **Date Created** | July 12, 2025 |
| **Related Branches** | `12-upgrade-dependencies`, `13-remove-tsfixmes` |
| **Previous Developer** | Axel Wretman |
## Executive Summary
This report documents a comprehensive analysis of:
1. **Previous developer's dependency update attempts** (merged branches 12 and 13)
2. **Current state of all dependencies** across the OpenNoodl monorepo
3. **Recommendations** for completing the dependency modernization work
### Key Findings
| Category | Status | Action Required |
|----------|--------|-----------------|
| React 19 Migration | ✅ Done | Minor validation needed |
| Storybook 9 Migration | ⚠️ Broken | Scripts need fixing |
| Webpack Ecosystem | 🔶 Partial | Plugin updates needed |
| Electron | 🔴 Outdated | 31.3.1 → 39.x consideration |
| ESLint/TypeScript | 🔴 Outdated | Major version jump needed |
| Build Tools | 🔶 Mixed | Various version inconsistencies |
---
## Background: Previous Developer's Work
### Branch 12: `12-upgrade-dependencies`
**Developer:** Axel Wretman
**Key Commits:**
- `162eb5f` - "Updated node version, react version and react dependant dependencies"
- `5bed0a3` - "Update rendering to use non deprecated react-dom calls"
**What Was Changed:**
| Package | Before | After | Breaking? |
|---------|--------|-------|-----------|
| react | 17.0.2 | 19.0.0 | ✅ Yes |
| react-dom | 17.0.0 | 19.0.0 | ✅ Yes |
| react-instantsearch-hooks-web | 6.38.0 | react-instantsearch 7.16.2 | ✅ Yes (renamed) |
| webpack | 5.74.0 | 5.101.3 | No |
| typescript | 4.8.3 | 4.9.5 | No |
| @types/react | 17.0.50 | 19.0.0 | ✅ Yes |
| @types/react-dom | 18.0.0 | 19.0.0 | No |
| node engine | >=16 <=18 | >=16 | No (relaxed) |
| Storybook | @storybook/* 6.5.x | storybook 9.1.3 | ✅ Yes |
| electron-builder | 24.9.1 | 24.13.3 | No |
| electron-updater | 6.1.7 | 6.6.2 | No |
| algoliasearch | 4.14.2 | 5.35.0 | ✅ Yes |
| express | 4.17.3/4.18.1 | 4.21.2 | No |
| ws | 8.9.0 | 8.18.3 | No |
| sass | 1.53.0/1.55.0 | 1.90.0 | No |
| dugite | 1.106.0 | 1.110.0 | No |
**Code Changes (React 19 Migration):**
- Updated `ReactDOM.render()` calls to use `createRoot()` pattern
- Files modified:
- `packages/noodl-editor/src/editor/index.ts`
- `packages/noodl-editor/src/editor/src/router.tsx`
- `packages/noodl-editor/src/editor/src/views/commentlayer.ts`
- `packages/noodl-editor/src/editor/src/views/nodegrapheditor.ts`
- Several popup/dialog components
### Branch 13: `13-remove-tsfixmes`
**Developer:** Axel Wretman
**Key Commit:** `960f38c` - "Remove TSFixme from property panel UI"
**What Was Changed:**
- Type safety improvements in `noodl-core-ui` property panel components
- No dependency changes
- Focused on removing `TSFixme` type escapes from:
- `Checkbox.tsx`
- `MenuDialog.tsx`
- `PropertyPanelInput.tsx`
- `PropertyPanelNumberInput.tsx`
- `PropertyPanelSliderInput.tsx`
- And other property panel components
---
## Current State: Critical Issues
### 1. 🔴 Storybook Scripts Broken
**Location:** `packages/noodl-core-ui/package.json`
**Problem:** The package uses Storybook 9.x but has Storybook 6.x commands:
```json
"scripts": {
"start": "start-storybook -p 6006 -s public", // WRONG
"build": "build-storybook -s public" // WRONG
}
```
**Required Fix:**
```json
"scripts": {
"start": "storybook dev -p 6006",
"build": "storybook build"
}
```
**Impact:** Storybook cannot run for component development/testing.
### 2. 🔴 Major Version Gaps
Several critical dependencies are multiple major versions behind:
| Package | Current | Latest | Gap |
|---------|---------|--------|-----|
| electron | 31.3.1 | 39.2.6 | 8 major |
| eslint | 8.57.1 | 9.39.1 | 1 major |
| @typescript-eslint/* | 5.62.0 | 8.48.1 | 3 major |
| dugite | 1.110.0 | 3.0.0 | 2 major |
| express | 4.21.2 | 5.2.1 | 1 major |
| jest | 28.1.3 | 29.7.0 | 1 major |
### 3. 🟡 Version Inconsistencies Across Packages
| Dependency | Root | noodl-editor | noodl-viewer-react | noodl-core-ui |
|------------|------|-------------|-------------------|---------------|
| typescript | 4.9.5 | 4.9.5 | **5.1.3** | 4.9.5 |
| css-loader | - | 6.11.0 | **5.0.0** | - |
| webpack-dev-server | 4.15.2 | 4.15.2 | **3.11.2** | - |
| @types/jest | - | - | 27.5.2 | 27.5.2 |
| style-loader | - | 3.3.4 | **2.0.0** | - |
### 4. 🟡 Outdated Webpack Plugins
| Plugin | Current | Latest | Status |
|--------|---------|--------|--------|
| copy-webpack-plugin | 4.6.0 | 13.0.1 | 🔴 Very outdated |
| clean-webpack-plugin | 1.0.1 | 4.0.0 | 🔴 Very outdated |
| html-loader | 3.1.2 | 5.1.0 | 🟡 Outdated |
| babel-loader | 8.4.1 | 10.0.0 | 🟡 Outdated |
| @svgr/webpack | 6.5.1 | 8.1.0 | 🟡 Outdated |
---
## Recommendations
See [RECOMMENDATIONS.md](./RECOMMENDATIONS.md) for detailed prioritized recommendations.
### Quick Summary
| Priority | Item | Effort |
|----------|------|--------|
| 🔴 P0 | Fix Storybook scripts | 5 min |
| 🔴 P0 | Standardize TypeScript version | 30 min |
| 🟡 P1 | Update webpack plugins | 2 hours |
| 🟡 P1 | Update Jest to v29 | 1 hour |
| 🟢 P2 | Consider Electron upgrade | TBD |
| 🟢 P2 | Consider ESLint 9 migration | 2-4 hours |
| 🔵 P3 | Express 5.x (future) | TBD |
| 🔵 P3 | Dugite 3.x (future) | TBD |
---
## Impact on Other Tasks
### Updates for TASK-001 (Dependency Updates)
The following items should be added to TASK-001's scope:
- [x] ~~React 19 migration~~ (Already done by previous dev)
- [ ] **FIX: Storybook scripts in noodl-core-ui**
- [ ] Webpack plugins update (copy-webpack-plugin, clean-webpack-plugin)
- [ ] TypeScript version alignment (standardize on 4.9.5 or upgrade to 5.x)
- [ ] css-loader/style-loader version alignment
- [ ] webpack-dev-server version alignment
### Updates for TASK-002 (Legacy Project Migration)
Additional considerations for backward compatibility:
- Express 5.x migration would break Parse Dashboard
- Electron 31→39 upgrade requires testing all native features
- Dugite 3.0 has breaking API changes affecting git operations
- Algoliasearch 5.x has different API patterns
---
## Related Files
- [DETAILED-ANALYSIS.md](./DETAILED-ANALYSIS.md) - Full package-by-package breakdown
- [RECOMMENDATIONS.md](./RECOMMENDATIONS.md) - Prioritized action items
- [IMPACT-MATRIX.md](./IMPACT-MATRIX.md) - Breaking changes impact assessment
---
## Methodology
This analysis was conducted by:
1. Examining git history for branches 12 and 13
2. Reading all `package.json` files across the monorepo
3. Running `npm outdated` to identify version gaps
4. Comparing the previous developer's intended changes with current state
5. Cross-referencing with existing TASK-001 and TASK-002 documentation