Skip to content

Commit 5d9d636

Browse files
Introduce BridgeJS, a declarative JS interop system
1 parent f4d5219 commit 5d9d636

File tree

125 files changed

+10752
-22
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

125 files changed

+10752
-22
lines changed

Examples/ExportAPI/.gitignore

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
.DS_Store
2+
/.build
3+
/Packages
4+
xcuserdata/
5+
DerivedData/
6+
.swiftpm/configuration/registries.json
7+
.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8+
.netrc

Examples/ExportAPI/Package.swift

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// swift-tools-version:6.0
2+
3+
import PackageDescription
4+
5+
let package = Package(
6+
name: "MyApp",
7+
platforms: [
8+
.macOS(.v14)
9+
],
10+
dependencies: [.package(name: "JavaScriptKit", path: "../../")],
11+
targets: [
12+
.executableTarget(
13+
name: "MyApp",
14+
dependencies: [
15+
"JavaScriptKit"
16+
],
17+
exclude: ["bridge.d.ts", "Generated/JavaScript"],
18+
swiftSettings: [
19+
.enableExperimentalFeature("Extern")
20+
],
21+
plugins: [
22+
// .plugin(name: "BridgeJS", package: "JavaScriptKit")
23+
]
24+
)
25+
],
26+
swiftLanguageModes: [.v5]
27+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import chroma from "chroma-js"
2+
3+
export function createImports() {
4+
return {
5+
/**
6+
* @param {string} message
7+
* @returns {void}
8+
*/
9+
log: (message) => console.log(message),
10+
chroma,
11+
/** @type {Pick<typeof document, "getElementById" | "body">} */
12+
document,
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
@_extern(wasm, module: "bjs", name: "return_string")
2+
private func _return_string(_ ptr: UnsafePointer<UInt8>?, _ len: Int32)
3+
@_extern(wasm, module: "bjs", name: "init_memory")
4+
private func _init_memory(_ sourceId: Int32, _ ptr: UnsafeMutablePointer<UInt8>?)
5+
6+
@_expose(wasm, "bjs_hello")
7+
@_cdecl("bjs_hello")
8+
public func _bjs_hello() -> Void {
9+
var ret = hello()
10+
return ret.withUTF8 { ptr in
11+
_return_string(ptr.baseAddress, Int32(ptr.count))
12+
}
13+
}
14+
15+
@_expose(wasm, "bjs_twice")
16+
@_cdecl("bjs_twice")
17+
public func _bjs_twice(x: Int32) -> Int32 {
18+
let ret = twice(x: Int(x))
19+
return Int32(ret)
20+
}
21+
22+
@_expose(wasm, "bjs_benchmarkNumberToString_Import")
23+
@_cdecl("bjs_benchmarkNumberToString_Import")
24+
public func _bjs_benchmarkNumberToString_Import() -> Void {
25+
benchmarkNumberToString_Import()
26+
}
27+
28+
@_expose(wasm, "bjs_benchmarkNumberToString_DML")
29+
@_cdecl("bjs_benchmarkNumberToString_DML")
30+
public func _bjs_benchmarkNumberToString_DML() -> Void {
31+
benchmarkNumberToString_DML()
32+
}
33+
34+
@_expose(wasm, "bjs_benchmarkStringToNumber_Import")
35+
@_cdecl("bjs_benchmarkStringToNumber_Import")
36+
public func _bjs_benchmarkStringToNumber_Import() -> Void {
37+
benchmarkStringToNumber_Import()
38+
}
39+
40+
@_expose(wasm, "bjs_benchmarkStringToNumber_DML")
41+
@_cdecl("bjs_benchmarkStringToNumber_DML")
42+
public func _bjs_benchmarkStringToNumber_DML() -> Void {
43+
benchmarkStringToNumber_DML()
44+
}
45+
46+
@_expose(wasm, "bjs_render")
47+
@_cdecl("bjs_render")
48+
public func _bjs_render() -> Void {
49+
render()
50+
}

0 commit comments

Comments
 (0)