Skip to content

Conversation

@just-be-dev
Copy link
Owner

Summary

This PR converts the Deno-specific webview client to be universally compatible with Deno, Node.js, and Bun runtimes. The changes enable cross-platform usage while maintaining backward compatibility with existing Deno workflows.

Configuration Migration: Replaced deno.json with package.json for npm ecosystem compatibility
API Conversion: Converted all Deno-specific APIs to Node.js built-ins using node: prefix
Import System: Implemented TypeScript configuration for extensionless imports with post-build processing
Cross-Runtime Support: Added platform detection and fallback handling for unknown runtimes
Binary Management: Enhanced binary downloading with cross-platform cache directory resolution
Examples Update: Updated all examples to use new import paths and work with compiled JavaScript

Key Technical Changes

Runtime API Conversion

  • Deno.Commandnode:child_process.spawn
  • Deno.envprocess.env
  • Deno.writeFilenode:fs/promises.writeFile
  • Deno.readTextFilenode:fs/promises.readFile
  • Deno.mkdirnode:fs/promises.mkdir
  • Added platform detection for Bun with graceful fallbacks

Build System

  • Created two-phase TypeScript compilation process
  • Added fix-imports.js script to convert extensionless imports to .js extensions
  • Configured TypeScript for extensionless source imports while maintaining Node.js ESM compatibility

Dependency Management

  • Migrated from JSR dependencies to npm equivalents
  • Replaced unavailable packages with compatible alternatives:
    • @bcheidemann/tracing → custom console logger
    • @gabriel/ts-patternts-pattern

Test Plan

  • Install dependencies: cd src/clients/deno && npm install
  • Build the project: npm run build
  • Test Node.js compatibility: node examples/simple.js
  • Test Deno compatibility: deno run --allow-all examples/simple.ts
  • Verify all examples compile and run successfully
  • Check that webview creation and basic functionality works across runtimes
  • Ensure binary downloading works on different platforms

Runtime Compatibility

  • Node.js 18+ (fully supported with native APIs)
  • Deno (backward compatible, can use TypeScript directly)
  • ⚠️ Bun (limited support, may have issues with older versions)

Breaking Changes

None for existing Deno users - the package maintains full backward compatibility while adding Node.js/Bun support.

- Replace deno.json with package.json configuration
- Convert Deno APIs to Node.js built-ins with node: prefix
- Add TypeScript configuration for extensionless imports
- Create post-build script to fix imports for Node.js compatibility
- Update all examples to use new import paths
- Add support for cross-runtime binary downloading
- Remove Deno-specific configuration files
- Delete all compiled .js, .js.map, .d.ts, and .d.ts.map files
- Keep fix-imports.js as it's a source script
- Add .gitignore to prevent future build artifacts from being committed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants