Skip to content

Commit 6682a2e

Browse files
BridgeJS: Prepare for MVP release for documentation and relaxing feature gates (#630)
* BridgeJS: Make `@JSClass`, `@JSFunction`, etc generally available without @_spi(Experimental) * BridgeJS: Remove JAVASCRIPTKIT_EXPERIMENTAL_BRIDGEJS feature gate * BridgeJS: Update documentation for MVP release * [skip ci] Update READMEs
1 parent e34f382 commit 6682a2e

File tree

54 files changed

+1091
-585
lines changed

Some content is hidden

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

54 files changed

+1091
-585
lines changed

Benchmarks/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ This directory contains performance benchmarks for JavaScriptKit.
77
Before running the benchmarks, you need to build the test suite:
88

99
```bash
10-
JAVASCRIPTKIT_EXPERIMENTAL_BRIDGEJS=1 swift package --swift-sdk $SWIFT_SDK_ID js -c release
10+
swift package --swift-sdk $SWIFT_SDK_ID js -c release
1111
```
1212

1313
## Running Benchmarks

Benchmarks/Sources/Generated/BridgeJS.Macros.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// To update this file, just rebuild your project or run
55
// `swift package bridge-js`.
66

7-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
7+
@_spi(BridgeJS) import JavaScriptKit
88

99
@JSFunction func benchmarkHelperNoop() throws(JSException) -> Void
1010

Examples/ExportSwift/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ This example demonstrates how to export Swift functions to JavaScript.
55

66
1. Build the project:
77
```sh
8-
env JAVASCRIPTKIT_EXPERIMENTAL_BRIDGEJS=1 swift package --swift-sdk $SWIFT_SDK_ID js --use-cdn
8+
swift package --swift-sdk $SWIFT_SDK_ID js --use-cdn
99
```
1010

1111
2. Serve the files:

Examples/PlayBridgeJS/Sources/PlayBridgeJS/Generated/BridgeJS.Macros.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// To update this file, just rebuild your project or run
55
// `swift package bridge-js`.
66

7-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
7+
@_spi(BridgeJS) import JavaScriptKit
88

99
@JSFunction func createTS2Swift() throws(JSException) -> TS2Swift
1010

Examples/PlayBridgeJS/build.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/bin/bash
22
set -euxo pipefail
3-
env JAVASCRIPTKIT_EXPERIMENTAL_BRIDGEJS=1 swift package --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1}}" \
3+
swift package --swift-sdk "${SWIFT_SDK_ID_wasm32_unknown_wasip1:-${SWIFT_SDK_ID:-wasm32-unknown-wasip1}}" \
44
plugin --allow-writing-to-package-directory \
55
js --use-cdn --output ./Bundle -c "${1:-debug}"

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ unittest:
1616
echo "SWIFT_SDK_ID is not set. Run 'swift sdk list' and pass a matching SDK, e.g. 'make unittest SWIFT_SDK_ID=<id>'."; \
1717
exit 2; \
1818
}
19-
env JAVASCRIPTKIT_EXPERIMENTAL_BRIDGEJS=1 swift package --swift-sdk "$(SWIFT_SDK_ID)" \
19+
swift package --swift-sdk "$(SWIFT_SDK_ID)" \
2020
$(TRACING_ARGS) \
2121
--disable-sandbox \
2222
js test --prelude ./Tests/prelude.mjs -Xnode --expose-gc

Plugins/BridgeJS/README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
# BridgeJS
22

33
> [!IMPORTANT]
4-
> This feature is still experimental, and the API may change frequently. Use at your own risk with `JAVASCRIPTKIT_EXPERIMENTAL_BRIDGEJS=1` environment variable.
4+
> This feature is still experimental, and the API may change frequently. Use at your own risk.
55
66
> [!NOTE]
7-
> This documentation is intended for JavaScriptKit developers, not JavaScriptKit users. For user documentation, see [Exporting Swift to JavaScript](https://swiftpackageindex.com/swiftwasm/JavaScriptKit/documentation/javascriptkit/exporting-swift-to-javascript) and [Importing TypeScript into Swift](https://swiftpackageindex.com/swiftwasm/JavaScriptKit/documentation/javascriptkit/importing-typescript-into-swift).
7+
> This documentation is intended for JavaScriptKit developers, not JavaScriptKit users. For user documentation, see [Introducing BridgeJS](https://swiftpackageindex.com/swiftwasm/JavaScriptKit/documentation/javascriptkit/introducing-bridgejs), [Setting up BridgeJS](https://swiftpackageindex.com/swiftwasm/JavaScriptKit/documentation/javascriptkit/setting-up-bridgejs), [Exporting Swift to JavaScript](https://swiftpackageindex.com/swiftwasm/JavaScriptKit/documentation/javascriptkit/exporting-swift-to-javascript), [Importing JavaScript into Swift](https://swiftpackageindex.com/swiftwasm/JavaScriptKit/documentation/javascriptkit/importing-javascript-into-swift), and [Generating bindings from TypeScript](https://swiftpackageindex.com/swiftwasm/JavaScriptKit/documentation/javascriptkit/generating-from-typescript).
88
99
## Overview
1010

1111
BridgeJS provides easy interoperability between Swift and JavaScript/TypeScript. It enables:
1212

13-
1. **Importing TypeScript APIs into Swift**: Use TypeScript/JavaScript APIs directly from Swift code
14-
2. **Exporting Swift APIs to JavaScript**: Make your Swift APIs available to JavaScript code
13+
1. **Export Swift to JavaScript** – Expose Swift functions, classes, and types to JavaScript; the plugin generates TypeScript definitions (`.d.ts`) for the exported API.
14+
2. **Import JavaScript into Swift**Make JavaScript/TypeScript APIs callable from Swift with macro-annotated bindings or bindings generated from a TypeScript declaration file (`bridge-js.d.ts`).
1515

1616
The workflow is:
1717

@@ -161,7 +161,7 @@ Return values use direct Wasm returns for primitives, and imported intrinsic fun
161161
- **Structs/Arrays/Enums**: Copy semantics - data serialized across boundary. No cleanup needed.
162162
- **Closures**: Boxed on source side, released when GC'd on either side.
163163

164-
For detailed semantics, see the [How It Works sections](https://swiftpackageindex.com/swiftwasm/JavaScriptKit/documentation/javascriptkit/exporting-swift-class#How-It-Works) in the user documentation.
164+
For detailed semantics, see the [How It Works sections](https://swiftpackageindex.com/swiftwasm/JavaScriptKit/documentation/javascriptkit/exporting-swift-class#how-it-works) in the user documentation.
165165

166166
## Testing
167167

Plugins/BridgeJS/Sources/TS2Swift/JavaScript/src/cli.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ export function run(filePath, options) {
123123
"// To update this file, just rebuild your project or run",
124124
"// `swift package bridge-js`.",
125125
"",
126-
"@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit",
126+
"@_spi(BridgeJS) import JavaScriptKit",
127127
"",
128128
"",
129129
].join("\n");

Plugins/BridgeJS/Sources/TS2Swift/JavaScript/test/__snapshots__/ts2swift.test.js.snap

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ exports[`ts2swift > snapshots Swift output for ArrayParameter.d.ts > ArrayParame
77
// To update this file, just rebuild your project or run
88
// \`swift package bridge-js\`.
99
10-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
10+
@_spi(BridgeJS) import JavaScriptKit
1111
1212
@JSFunction func processNumbers(_ values: [Double]) throws(JSException) -> Void
1313
@@ -30,7 +30,7 @@ exports[`ts2swift > snapshots Swift output for Async.d.ts > Async 1`] = `
3030
// To update this file, just rebuild your project or run
3131
// \`swift package bridge-js\`.
3232
33-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
33+
@_spi(BridgeJS) import JavaScriptKit
3434
3535
@JSFunction func asyncReturnVoid() throws(JSException) -> JSPromise
3636
@@ -55,7 +55,7 @@ exports[`ts2swift > snapshots Swift output for Documentation.d.ts > Documentatio
5555
// To update this file, just rebuild your project or run
5656
// \`swift package bridge-js\`.
5757
58-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
58+
@_spi(BridgeJS) import JavaScriptKit
5959
6060
/// Return a greeting for a user.
6161
///
@@ -112,7 +112,7 @@ exports[`ts2swift > snapshots Swift output for Interface.d.ts > Interface 1`] =
112112
// To update this file, just rebuild your project or run
113113
// \`swift package bridge-js\`.
114114
115-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
115+
@_spi(BridgeJS) import JavaScriptKit
116116
117117
@JSFunction func returnAnimatable() throws(JSException) -> Animatable
118118
@@ -130,7 +130,7 @@ exports[`ts2swift > snapshots Swift output for InvalidPropertyNames.d.ts > Inval
130130
// To update this file, just rebuild your project or run
131131
// \`swift package bridge-js\`.
132132
133-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
133+
@_spi(BridgeJS) import JavaScriptKit
134134
135135
@JSFunction func createArrayBuffer() throws(JSException) -> ArrayBufferLike
136136
@@ -178,7 +178,7 @@ exports[`ts2swift > snapshots Swift output for MultipleImportedTypes.d.ts > Mult
178178
// To update this file, just rebuild your project or run
179179
// \`swift package bridge-js\`.
180180
181-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
181+
@_spi(BridgeJS) import JavaScriptKit
182182
183183
@JSFunction func createDatabaseConnection(_ config: JSValue) throws(JSException) -> DatabaseConnection
184184
@@ -215,7 +215,7 @@ exports[`ts2swift > snapshots Swift output for ObjectLikeTypes.d.ts > ObjectLike
215215
// To update this file, just rebuild your project or run
216216
// \`swift package bridge-js\`.
217217
218-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
218+
@_spi(BridgeJS) import JavaScriptKit
219219
220220
@JSFunction func acceptObject(_ v: JSObject) throws(JSException) -> Void
221221
"
@@ -228,7 +228,7 @@ exports[`ts2swift > snapshots Swift output for OptionalNullUndefined.d.ts > Opti
228228
// To update this file, just rebuild your project or run
229229
// \`swift package bridge-js\`.
230230
231-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
231+
@_spi(BridgeJS) import JavaScriptKit
232232
233233
@JSFunction func roundTripNumberNull(_ value: Optional<Double>) throws(JSException) -> Optional<Double>
234234
@@ -269,7 +269,7 @@ exports[`ts2swift > snapshots Swift output for PrimitiveParameters.d.ts > Primit
269269
// To update this file, just rebuild your project or run
270270
// \`swift package bridge-js\`.
271271
272-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
272+
@_spi(BridgeJS) import JavaScriptKit
273273
274274
@JSFunction func check(_ a: Double, _ b: Bool) throws(JSException) -> Void
275275
"
@@ -282,7 +282,7 @@ exports[`ts2swift > snapshots Swift output for PrimitiveReturn.d.ts > PrimitiveR
282282
// To update this file, just rebuild your project or run
283283
// \`swift package bridge-js\`.
284284
285-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
285+
@_spi(BridgeJS) import JavaScriptKit
286286
287287
@JSFunction func checkNumber() throws(JSException) -> Double
288288
@@ -297,7 +297,7 @@ exports[`ts2swift > snapshots Swift output for ReExportFrom.d.ts > ReExportFrom
297297
// To update this file, just rebuild your project or run
298298
// \`swift package bridge-js\`.
299299
300-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
300+
@_spi(BridgeJS) import JavaScriptKit
301301
302302
@JSFunction func jsRoundTripNumber(_ v: Double) throws(JSException) -> Double
303303
@@ -315,7 +315,7 @@ exports[`ts2swift > snapshots Swift output for RecordDictionary.d.ts > RecordDic
315315
// To update this file, just rebuild your project or run
316316
// \`swift package bridge-js\`.
317317
318-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
318+
@_spi(BridgeJS) import JavaScriptKit
319319
320320
@JSFunction func takeRecord(_ value: [String: Double]) throws(JSException) -> Void
321321
@@ -345,7 +345,7 @@ exports[`ts2swift > snapshots Swift output for StringEnum.d.ts > StringEnum 1`]
345345
// To update this file, just rebuild your project or run
346346
// \`swift package bridge-js\`.
347347
348-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
348+
@_spi(BridgeJS) import JavaScriptKit
349349
350350
enum FeatureFlag: String {
351351
case foo = "foo"
@@ -366,7 +366,7 @@ exports[`ts2swift > snapshots Swift output for StringParameter.d.ts > StringPara
366366
// To update this file, just rebuild your project or run
367367
// \`swift package bridge-js\`.
368368
369-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
369+
@_spi(BridgeJS) import JavaScriptKit
370370
371371
@JSFunction func checkString(_ a: String) throws(JSException) -> Void
372372
@@ -381,7 +381,7 @@ exports[`ts2swift > snapshots Swift output for StringReturn.d.ts > StringReturn
381381
// To update this file, just rebuild your project or run
382382
// \`swift package bridge-js\`.
383383
384-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
384+
@_spi(BridgeJS) import JavaScriptKit
385385
386386
@JSFunction func checkString() throws(JSException) -> String
387387
"
@@ -394,7 +394,7 @@ exports[`ts2swift > snapshots Swift output for TS2SkeletonLike.d.ts > TS2Skeleto
394394
// To update this file, just rebuild your project or run
395395
// \`swift package bridge-js\`.
396396
397-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
397+
@_spi(BridgeJS) import JavaScriptKit
398398
399399
@JSFunction func createTS2Skeleton() throws(JSException) -> TypeScriptProcessor
400400
@@ -420,7 +420,7 @@ exports[`ts2swift > snapshots Swift output for TypeAlias.d.ts > TypeAlias 1`] =
420420
// To update this file, just rebuild your project or run
421421
// \`swift package bridge-js\`.
422422
423-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
423+
@_spi(BridgeJS) import JavaScriptKit
424424
425425
@JSFunction func checkSimple(_ a: Double) throws(JSException) -> Void
426426
"
@@ -433,7 +433,7 @@ exports[`ts2swift > snapshots Swift output for TypeAliasObject.d.ts > TypeAliasO
433433
// To update this file, just rebuild your project or run
434434
// \`swift package bridge-js\`.
435435
436-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
436+
@_spi(BridgeJS) import JavaScriptKit
437437
438438
@JSFunction func console() throws(JSException) -> Console
439439
@@ -452,7 +452,7 @@ exports[`ts2swift > snapshots Swift output for TypeScriptClass.d.ts > TypeScript
452452
// To update this file, just rebuild your project or run
453453
// \`swift package bridge-js\`.
454454
455-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
455+
@_spi(BridgeJS) import JavaScriptKit
456456
457457
@JSClass struct Greeter {
458458
@JSGetter var name: String
@@ -473,7 +473,7 @@ exports[`ts2swift > snapshots Swift output for VoidParameterVoidReturn.d.ts > Vo
473473
// To update this file, just rebuild your project or run
474474
// \`swift package bridge-js\`.
475475
476-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
476+
@_spi(BridgeJS) import JavaScriptKit
477477
478478
@JSFunction func check() throws(JSException) -> Void
479479
"
@@ -486,7 +486,7 @@ exports[`ts2swift > snapshots Swift output for WebIDLDOMDocs.d.ts > WebIDLDOMDoc
486486
// To update this file, just rebuild your project or run
487487
// \`swift package bridge-js\`.
488488
489-
@_spi(Experimental) @_spi(BridgeJS) import JavaScriptKit
489+
@_spi(BridgeJS) import JavaScriptKit
490490
491491
/// [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document)
492492
@JSGetter var document: Document

Plugins/PackageToJS/Sources/PackageToJS.swift

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -589,11 +589,6 @@ struct PackagingPlanner {
589589
packageInputs.append(packageJsonTask)
590590

591591
if skeletons.count > 0 {
592-
if ProcessInfo.processInfo.environment["JAVASCRIPTKIT_EXPERIMENTAL_BRIDGEJS"] == nil {
593-
fatalError(
594-
"BridgeJS is still an experimental feature. Set the environment variable JAVASCRIPTKIT_EXPERIMENTAL_BRIDGEJS=1 to enable."
595-
)
596-
}
597592
let bridgeJs = outputDir.appending(path: "bridge-js.js")
598593
let bridgeDts = outputDir.appending(path: "bridge-js.d.ts")
599594
packageInputs.append(

0 commit comments

Comments
 (0)