4.2 KiB
4.2 KiB
OxJS ES Modules Migration Plan
Phase 1: Test Suite Creation
Existing Test Infrastructure
OxJS has an innovative inline test system built into its documentation format:
- Tests are embedded in documentation comments using
> statementfollowed by expected result - The
Ox.test()function extracts and runs these tests from the source - Tests can be synchronous or asynchronous
- Tests are human-readable and serve as documentation examples
Test Migration Strategy
-
Extract and modernize existing inline tests
- Use
Ox.doc()to parse all inline tests from source files - Convert inline tests to Jest/Vitest test suites
- Maintain inline tests for documentation purposes
- Ensure all existing inline tests pass before migration
- Use
-
Create additional test coverage
- Integration tests for module loading patterns
- Verify that ES module imports/exports work correctly
- Test the compatibility layer (Ox.load to ES modules bridge)
- Simple validation that existing examples still function
-
Set up test infrastructure
- Add Jest or Vitest for running extracted tests
- Create test helpers for legacy Ox.load patterns
- Build a test runner that can execute both inline and external tests
- Focus on verifying functionality, not UI testing initially
Phase 2: Build Infrastructure Setup
-
Initialize npm project
- Create package.json with proper metadata
- Add development dependencies (Vite, TypeScript, PostCSS, etc.)
- Set up ESLint and Prettier for code quality
-
Configure Vite build system
- Development server with ES modules
- Production builds (ES modules + UMD)
- Asset handling for themes, SVGs, and images
- CSS processing with PostCSS for theme variables
Phase 3: Core Module Conversion
-
Convert Ox core files to ES modules
- Start with leaf modules (no dependencies)
- Add explicit imports/exports
- Create index.js barrel exports
- Maintain careful load order for circular dependencies
-
Create compatibility layer
- Global Ox object for backward compatibility
- Polyfill for Ox.load() using dynamic imports
- Bridge between ES modules and legacy code
Phase 4: UI Module Migration
-
Convert UI components to ES modules
- Refactor each component as separate ES module
- Extract theme system to CSS variables
- Modernize SVG and image handling
-
Update theme processing
- Use CSS custom properties instead of build-time substitution
- Implement theme switching via CSS classes
- Bundle theme assets with Vite
Phase 5: Testing and Validation
-
Verify all functionality
- Run test suite
- Test all examples with new build
- Validate both dev and production builds
- Check browser compatibility
-
Performance testing
- Compare bundle sizes
- Measure load times
- Profile runtime performance
Phase 6: Documentation and Release
-
Update documentation
- Migration guide for existing users
- New ES modules usage examples
- API documentation updates
-
NPM package release
- Publish to npm registry
- Support multiple entry points (ES modules, UMD, legacy)
- Maintain backward compatibility
Key Implementation Tasks
- Convert ~50+ JavaScript files to ES modules
- Replace Python build script with Vite/npm scripts
- Modernize theme and asset processing
- Create basic test suite for functionality verification
- Ensure all existing examples continue working
- Support both modern ES imports and legacy script tags
Testing Strategy Details
Unit Tests (Phase 1)
Focus on core functionality:
- Test Ox.Array methods (unique, sort, etc.)
- Test Ox.String utilities (capitalize, format, etc.)
- Test Ox.Math functions
- Test Ox.Type checking utilities
- Verify module export/import structure
Integration Tests (Phase 1)
Verify module loading:
- Test dynamic import() for lazy loading
- Test circular dependency resolution
- Test module initialization order
- Test compatibility layer (Ox.load to ES modules)
- Basic smoke tests for UI component initialization
Advanced Testing (Future)
- E2E testing with Playwright
- Visual regression testing
- Performance benchmarking
- Cross-browser testing