Skip to content

Conversation

krodak
Copy link
Member

@krodak krodak commented Oct 17, 2025

Introduction

This PR adds basic support for exporting Swift protocols to JS / TS using BridgeJS plugin.

Overview

BridgeJS now supports exporting Swift protocols as TypeScript interfaces. JavaScript objects implementing these interfaces can be passed to Swift code, where they are automatically wrapped in generated Swift struct that forward method calls and property accesses to the JavaScript implementation.

When you mark a protocol with @JS, BridgeJS generates:

  • A TypeScript interface with the protocol's method signatures and properties
  • A Swift wrapper struct (Any{ProtocolName}) that conforms to the protocol
  • JavaScript bridge code that forwards calls between Swift and JavaScript

Current Limitations

This PR covers support for methods and basic types in parameters and return types, as these types are supported in both Export / Import directions.
Support for properties, Optional and others will be posted in separate PR as changeset is quite large.

Testing

Basic tests with protocol implementation on JS and Swift side used as delegate property of protocol type are added.

Documentation

Added to Sources/JavaScriptKit/Documentation.docc/Articles/BridgeJS/Exporting-Swift/Exporting-Swift-Protocols.md

@krodak krodak self-assigned this Oct 17, 2025
@krodak krodak force-pushed the feat/protocol-support-methods branch 3 times, most recently from c1d778e to e96d1e8 Compare October 17, 2025 15:11
[fe09c4b1] Simplify export swift
[b42bb7c1] WIP: Simplify protocol method generation
[75e1ed37] BridgeJSLink simplification
[b1fcc4d0] Cleanup
[70aa0332] WIP: Final wrap
[2f648eaf] WIP: Protocols simplification
[f2f89b33] WIP: Fix for parameters in methods
[6026fc1d] WIP: Test protocol methods with parameters
@krodak krodak force-pushed the feat/protocol-support-methods branch from e96d1e8 to 7efb593 Compare October 17, 2025 16:18
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.

1 participant