Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

BridgeJS: @JS Protocol with methods support #456

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

@krodak
Copy link
Member

@krodak krodak commented Oct 17, 2025
edited
Loading

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

kateinoigakukun reacted with hooray emoji kateinoigakukun reacted with heart emoji kateinoigakukun reacted with rocket emoji
@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
Copy link
Member

@kateinoigakukun kateinoigakukun left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me, thanks!

@kateinoigakukun kateinoigakukun merged commit 6310307 into swiftwasm:main Oct 22, 2025
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@kateinoigakukun kateinoigakukun kateinoigakukun approved these changes

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

AltStyle によって変換されたページ (->オリジナル) /