Skip to content

Commit 935130c

Browse files
BridgeJS: Update JSUndefinedOr APIs
- Rename `optionalRepresentation` to `asOptional`. - Remove `undefinedValue` static property and use `.undefined` case directly.
1 parent 0452169 commit 935130c

File tree

5 files changed

+55
-44
lines changed

5 files changed

+55
-44
lines changed

Plugins/BridgeJS/Sources/BridgeJSCore/ExportSwift.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ public class ExportSwift {
156156
let absentExpr =
157157
kind == .null
158158
? "\(optionalSwiftType)<[\(swiftTypeName)]>.none"
159-
: "\(optionalSwiftType)<[\(swiftTypeName)]>.undefinedValue"
159+
: "\(optionalSwiftType)<[\(swiftTypeName)]>.undefined"
160160
liftingExpr = ExprSyntax(
161161
"""
162162
{
@@ -934,7 +934,7 @@ struct StackCodegen {
934934
let swiftTypeName = elementType.swiftType
935935
let absentExpr =
936936
kind == .null
937-
? "\(typeName)<[\(swiftTypeName)]>.none" : "\(typeName)<[\(swiftTypeName)]>.undefinedValue"
937+
? "\(typeName)<[\(swiftTypeName)]>.none" : "\(typeName)<[\(swiftTypeName)]>.undefined"
938938
return """
939939
{
940940
let __isSome = _swift_js_pop_i32()
@@ -951,7 +951,7 @@ struct StackCodegen {
951951
let absentExpr =
952952
kind == .null
953953
? "\(typeName)<[String: \(swiftTypeName)]>.none"
954-
: "\(typeName)<[String: \(swiftTypeName)]>.undefinedValue"
954+
: "\(typeName)<[String: \(swiftTypeName)]>.undefined"
955955
return """
956956
{
957957
let __isSome = _swift_js_pop_i32()

Sources/JavaScriptKit/BridgeJSIntrinsics.swift

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public protocol _BridgedSwiftStackType {
143143
/// Used by JSUndefinedOr so all bridge methods delegate to Optional<Wrapped>.
144144
public protocol _BridgedAsOptional {
145145
associatedtype Wrapped
146-
var optionalRepresentation: Wrapped? { get }
146+
var asOptional: Wrapped? { get }
147147
init(optional: Wrapped?)
148148
}
149149

@@ -2019,7 +2019,7 @@ extension Optional where Wrapped: _BridgedSwiftStruct {
20192019

20202020
extension _BridgedAsOptional where Wrapped == Bool {
20212021
@_spi(BridgeJS) public consuming func bridgeJSLowerParameter() -> (isSome: Int32, value: Int32) {
2022-
optionalRepresentation.bridgeJSLowerParameter()
2022+
asOptional.bridgeJSLowerParameter()
20232023
}
20242024

20252025
@_spi(BridgeJS) public static func bridgeJSLiftParameter(_ isSome: Int32, _ wrappedValue: Int32) -> Self {
@@ -2035,13 +2035,13 @@ extension _BridgedAsOptional where Wrapped == Bool {
20352035
}
20362036

20372037
@_spi(BridgeJS) public consuming func bridgeJSLowerReturn() -> Void {
2038-
optionalRepresentation.bridgeJSLowerReturn()
2038+
asOptional.bridgeJSLowerReturn()
20392039
}
20402040
}
20412041

20422042
extension _BridgedAsOptional where Wrapped == Int {
20432043
@_spi(BridgeJS) public consuming func bridgeJSLowerParameter() -> (isSome: Int32, value: Int32) {
2044-
optionalRepresentation.bridgeJSLowerParameter()
2044+
asOptional.bridgeJSLowerParameter()
20452045
}
20462046

20472047
@_spi(BridgeJS) public static func bridgeJSLiftParameter(_ isSome: Int32, _ wrappedValue: Int32) -> Self {
@@ -2057,13 +2057,13 @@ extension _BridgedAsOptional where Wrapped == Int {
20572057
}
20582058

20592059
@_spi(BridgeJS) public consuming func bridgeJSLowerReturn() -> Void {
2060-
optionalRepresentation.bridgeJSLowerReturn()
2060+
asOptional.bridgeJSLowerReturn()
20612061
}
20622062
}
20632063

20642064
extension _BridgedAsOptional where Wrapped == UInt {
20652065
@_spi(BridgeJS) public consuming func bridgeJSLowerParameter() -> (isSome: Int32, value: Int32) {
2066-
optionalRepresentation.bridgeJSLowerParameter()
2066+
asOptional.bridgeJSLowerParameter()
20672067
}
20682068

20692069
@_spi(BridgeJS) public static func bridgeJSLiftParameter(_ isSome: Int32, _ wrappedValue: Int32) -> Self {
@@ -2079,13 +2079,13 @@ extension _BridgedAsOptional where Wrapped == UInt {
20792079
}
20802080

20812081
@_spi(BridgeJS) public consuming func bridgeJSLowerReturn() -> Void {
2082-
optionalRepresentation.bridgeJSLowerReturn()
2082+
asOptional.bridgeJSLowerReturn()
20832083
}
20842084
}
20852085

20862086
extension _BridgedAsOptional where Wrapped == String {
20872087
@_spi(BridgeJS) public consuming func bridgeJSLowerParameter() -> (isSome: Int32, value: Int32) {
2088-
optionalRepresentation.bridgeJSLowerParameter()
2088+
asOptional.bridgeJSLowerParameter()
20892089
}
20902090

20912091
@_spi(BridgeJS) public static func bridgeJSLiftParameter(
@@ -2105,13 +2105,13 @@ extension _BridgedAsOptional where Wrapped == String {
21052105
}
21062106

21072107
@_spi(BridgeJS) public consuming func bridgeJSLowerReturn() -> Void {
2108-
optionalRepresentation.bridgeJSLowerReturn()
2108+
asOptional.bridgeJSLowerReturn()
21092109
}
21102110
}
21112111

21122112
extension _BridgedAsOptional where Wrapped == JSObject {
21132113
@_spi(BridgeJS) public consuming func bridgeJSLowerParameter() -> (isSome: Int32, value: Int32) {
2114-
optionalRepresentation.bridgeJSLowerParameter()
2114+
asOptional.bridgeJSLowerParameter()
21152115
}
21162116

21172117
@_spi(BridgeJS) public static func bridgeJSLiftParameter(_ isSome: Int32, _ objectId: Int32) -> Self {
@@ -2123,7 +2123,7 @@ extension _BridgedAsOptional where Wrapped == JSObject {
21232123
}
21242124

21252125
@_spi(BridgeJS) public consuming func bridgeJSLowerReturn() -> Void {
2126-
optionalRepresentation.bridgeJSLowerReturn()
2126+
asOptional.bridgeJSLowerReturn()
21272127
}
21282128
}
21292129

@@ -2133,20 +2133,20 @@ extension _BridgedAsOptional where Wrapped: _BridgedSwiftProtocolWrapper {
21332133
}
21342134

21352135
@_spi(BridgeJS) public consuming func bridgeJSLowerReturn() -> Void {
2136-
optionalRepresentation.bridgeJSLowerReturn()
2136+
asOptional.bridgeJSLowerReturn()
21372137
}
21382138
}
21392139

21402140
extension _BridgedAsOptional where Wrapped: _BridgedSwiftHeapObject {
21412141
@_spi(BridgeJS) public consuming func bridgeJSLowerParameter() -> (isSome: Int32, pointer: UnsafeMutableRawPointer)
21422142
{
2143-
optionalRepresentation.bridgeJSLowerParameter()
2143+
asOptional.bridgeJSLowerParameter()
21442144
}
21452145

21462146
@_spi(BridgeJS) public consuming func bridgeJSLowerParameterWithRetain() -> (
21472147
isSome: Int32, pointer: UnsafeMutableRawPointer
21482148
) {
2149-
optionalRepresentation.bridgeJSLowerParameterWithRetain()
2149+
asOptional.bridgeJSLowerParameterWithRetain()
21502150
}
21512151

21522152
@_spi(BridgeJS) public static func bridgeJSLiftParameter(
@@ -2165,13 +2165,13 @@ extension _BridgedAsOptional where Wrapped: _BridgedSwiftHeapObject {
21652165
}
21662166

21672167
@_spi(BridgeJS) public consuming func bridgeJSLowerReturn() -> Void {
2168-
optionalRepresentation.bridgeJSLowerReturn()
2168+
asOptional.bridgeJSLowerReturn()
21692169
}
21702170
}
21712171

21722172
extension _BridgedAsOptional where Wrapped == Float {
21732173
@_spi(BridgeJS) public consuming func bridgeJSLowerParameter() -> (isSome: Int32, value: Float32) {
2174-
optionalRepresentation.bridgeJSLowerParameter()
2174+
asOptional.bridgeJSLowerParameter()
21752175
}
21762176

21772177
@_spi(BridgeJS) public static func bridgeJSLiftParameter(_ isSome: Int32, _ wrappedValue: Float32) -> Self {
@@ -2187,13 +2187,13 @@ extension _BridgedAsOptional where Wrapped == Float {
21872187
}
21882188

21892189
@_spi(BridgeJS) public consuming func bridgeJSLowerReturn() -> Void {
2190-
optionalRepresentation.bridgeJSLowerReturn()
2190+
asOptional.bridgeJSLowerReturn()
21912191
}
21922192
}
21932193

21942194
extension _BridgedAsOptional where Wrapped == Double {
21952195
@_spi(BridgeJS) public consuming func bridgeJSLowerParameter() -> (isSome: Int32, value: Float64) {
2196-
optionalRepresentation.bridgeJSLowerParameter()
2196+
asOptional.bridgeJSLowerParameter()
21972197
}
21982198

21992199
@_spi(BridgeJS) public static func bridgeJSLiftParameter(_ isSome: Int32, _ wrappedValue: Float64) -> Self {
@@ -2209,13 +2209,13 @@ extension _BridgedAsOptional where Wrapped == Double {
22092209
}
22102210

22112211
@_spi(BridgeJS) public consuming func bridgeJSLowerReturn() -> Void {
2212-
optionalRepresentation.bridgeJSLowerReturn()
2212+
asOptional.bridgeJSLowerReturn()
22132213
}
22142214
}
22152215

22162216
extension _BridgedAsOptional where Wrapped: _BridgedSwiftCaseEnum {
22172217
@_spi(BridgeJS) public consuming func bridgeJSLowerParameter() -> (isSome: Int32, value: Int32) {
2218-
optionalRepresentation.bridgeJSLowerParameter()
2218+
asOptional.bridgeJSLowerParameter()
22192219
}
22202220

22212221
@_spi(BridgeJS) public static func bridgeJSLiftParameter(_ isSome: Int32, _ caseId: Int32) -> Self {
@@ -2231,20 +2231,20 @@ extension _BridgedAsOptional where Wrapped: _BridgedSwiftCaseEnum {
22312231
}
22322232

22332233
@_spi(BridgeJS) public consuming func bridgeJSLowerReturn() -> Void {
2234-
optionalRepresentation.bridgeJSLowerReturn()
2234+
asOptional.bridgeJSLowerReturn()
22352235
}
22362236
}
22372237

22382238
extension _BridgedAsOptional where Wrapped: _BridgedSwiftTypeLoweredIntoVoidType {
22392239
@_spi(BridgeJS) public consuming func bridgeJSLowerReturn() -> Void {
2240-
optionalRepresentation.bridgeJSLowerReturn()
2240+
asOptional.bridgeJSLowerReturn()
22412241
}
22422242
}
22432243

22442244
extension _BridgedAsOptional
22452245
where Wrapped: _BridgedSwiftEnumNoPayload, Wrapped: RawRepresentable, Wrapped.RawValue == String {
22462246
@_spi(BridgeJS) public consuming func bridgeJSLowerParameter() -> (isSome: Int32, value: Int32) {
2247-
optionalRepresentation.bridgeJSLowerParameter()
2247+
asOptional.bridgeJSLowerParameter()
22482248
}
22492249

22502250
@_spi(BridgeJS) public static func bridgeJSLiftParameter(
@@ -2264,14 +2264,14 @@ where Wrapped: _BridgedSwiftEnumNoPayload, Wrapped: RawRepresentable, Wrapped.Ra
22642264
}
22652265

22662266
@_spi(BridgeJS) public consuming func bridgeJSLowerReturn() -> Void {
2267-
optionalRepresentation.bridgeJSLowerReturn()
2267+
asOptional.bridgeJSLowerReturn()
22682268
}
22692269
}
22702270

22712271
extension _BridgedAsOptional
22722272
where Wrapped: _BridgedSwiftEnumNoPayload, Wrapped: RawRepresentable, Wrapped.RawValue == Int {
22732273
@_spi(BridgeJS) public consuming func bridgeJSLowerParameter() -> (isSome: Int32, value: Int32) {
2274-
optionalRepresentation.bridgeJSLowerParameter()
2274+
asOptional.bridgeJSLowerParameter()
22752275
}
22762276

22772277
@_spi(BridgeJS) public static func bridgeJSLiftParameter(_ isSome: Int32, _ wrappedValue: Int32) -> Self {
@@ -2287,7 +2287,7 @@ where Wrapped: _BridgedSwiftEnumNoPayload, Wrapped: RawRepresentable, Wrapped.Ra
22872287
}
22882288

22892289
@_spi(BridgeJS) public consuming func bridgeJSLowerReturn() -> Void {
2290-
optionalRepresentation.bridgeJSLowerReturn()
2290+
asOptional.bridgeJSLowerReturn()
22912291
}
22922292
}
22932293

@@ -2302,14 +2302,14 @@ where Wrapped: _BridgedSwiftEnumNoPayload, Wrapped: RawRepresentable, Wrapped.Ra
23022302
}
23032303

23042304
@_spi(BridgeJS) public consuming func bridgeJSLowerReturn() -> Void {
2305-
optionalRepresentation.bridgeJSLowerReturn()
2305+
asOptional.bridgeJSLowerReturn()
23062306
}
23072307
}
23082308

23092309
extension _BridgedAsOptional
23102310
where Wrapped: _BridgedSwiftEnumNoPayload, Wrapped: RawRepresentable, Wrapped.RawValue == Float {
23112311
@_spi(BridgeJS) public consuming func bridgeJSLowerParameter() -> (isSome: Int32, value: Float32) {
2312-
optionalRepresentation.bridgeJSLowerParameter()
2312+
asOptional.bridgeJSLowerParameter()
23132313
}
23142314

23152315
@_spi(BridgeJS) public static func bridgeJSLiftParameter(_ isSome: Int32, _ wrappedValue: Float32) -> Self {
@@ -2325,14 +2325,14 @@ where Wrapped: _BridgedSwiftEnumNoPayload, Wrapped: RawRepresentable, Wrapped.Ra
23252325
}
23262326

23272327
@_spi(BridgeJS) public consuming func bridgeJSLowerReturn() -> Void {
2328-
optionalRepresentation.bridgeJSLowerReturn()
2328+
asOptional.bridgeJSLowerReturn()
23292329
}
23302330
}
23312331

23322332
extension _BridgedAsOptional
23332333
where Wrapped: _BridgedSwiftEnumNoPayload, Wrapped: RawRepresentable, Wrapped.RawValue == Double {
23342334
@_spi(BridgeJS) public consuming func bridgeJSLowerParameter() -> (isSome: Int32, value: Float64) {
2335-
optionalRepresentation.bridgeJSLowerParameter()
2335+
asOptional.bridgeJSLowerParameter()
23362336
}
23372337

23382338
@_spi(BridgeJS) public static func bridgeJSLiftParameter(_ isSome: Int32, _ wrappedValue: Float64) -> Self {
@@ -2348,13 +2348,13 @@ where Wrapped: _BridgedSwiftEnumNoPayload, Wrapped: RawRepresentable, Wrapped.Ra
23482348
}
23492349

23502350
@_spi(BridgeJS) public consuming func bridgeJSLowerReturn() -> Void {
2351-
optionalRepresentation.bridgeJSLowerReturn()
2351+
asOptional.bridgeJSLowerReturn()
23522352
}
23532353
}
23542354

23552355
extension _BridgedAsOptional where Wrapped: _BridgedSwiftAssociatedValueEnum {
23562356
@_spi(BridgeJS) public consuming func bridgeJSLowerParameter() -> (isSome: Int32, caseId: Int32) {
2357-
optionalRepresentation.bridgeJSLowerParameter()
2357+
asOptional.bridgeJSLowerParameter()
23582358
}
23592359

23602360
@_spi(BridgeJS) public static func bridgeJSLiftParameter(_ isSome: Int32, _ caseId: Int32) -> Self {
@@ -2370,7 +2370,7 @@ extension _BridgedAsOptional where Wrapped: _BridgedSwiftAssociatedValueEnum {
23702370
}
23712371

23722372
@_spi(BridgeJS) public consuming func bridgeJSLowerReturn() -> Void {
2373-
optionalRepresentation.bridgeJSLowerReturn()
2373+
asOptional.bridgeJSLowerReturn()
23742374
}
23752375
}
23762376

@@ -2384,7 +2384,7 @@ extension _BridgedAsOptional where Wrapped: _BridgedSwiftStruct {
23842384
}
23852385

23862386
@_spi(BridgeJS) public consuming func bridgeJSLowerReturn() -> Void {
2387-
optionalRepresentation.bridgeJSLowerReturn()
2387+
asOptional.bridgeJSLowerReturn()
23882388
}
23892389
}
23902390

@@ -2526,7 +2526,7 @@ extension _BridgedAsOptional where Wrapped: _BridgedSwiftDictionaryStackType {
25262526
typealias DictionaryValue = Wrapped.DictionaryValue
25272527

25282528
@_spi(BridgeJS) public consuming func bridgeJSLowerParameter() -> Int32 {
2529-
let opt = optionalRepresentation
2529+
let opt = asOptional
25302530
if let dict = opt {
25312531
dict.bridgeJSLowerReturn()
25322532
return 1

Sources/JavaScriptKit/JSUndefinedOr.swift

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,28 @@
1+
/// A wrapper that represents a JavaScript value of `Wrapped | undefined`.
2+
///
3+
/// In BridgeJS, `Optional<Wrapped>` is bridged as `Wrapped | null`.
4+
/// Use `JSUndefinedOr<Wrapped>` when the JavaScript API expects
5+
/// `Wrapped | undefined` instead.
16
@frozen public enum JSUndefinedOr<Wrapped> {
7+
/// The JavaScript value is `undefined`.
28
case undefined
9+
/// The JavaScript value is present and wrapped.
310
case value(Wrapped)
411

5-
/// Convenience accessor for the undefined case.
6-
public static var undefinedValue: Self { .undefined }
7-
12+
/// Creates a wrapper from a Swift optional.
13+
///
14+
/// - Parameter optional: The optional value to wrap.
15+
/// `nil` becomes ``undefined`` and a non-`nil` value becomes ``value(_:)``.
816
@inlinable
917
public init(optional: Wrapped?) {
1018
self = optional.map(Self.value) ?? .undefined
1119
}
1220

21+
/// Returns the wrapped value as a Swift optional.
22+
///
23+
/// Returns `nil` when this value is ``undefined``.
1324
@inlinable
14-
public var optionalRepresentation: Wrapped? {
25+
public var asOptional: Wrapped? {
1526
switch self {
1627
case .undefined:
1728
return nil

Tests/BridgeJSRuntimeTests/DictionaryTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ final class DictionaryTests: XCTestCase {
5757

5858
func testRoundTripOptionalDictionaryUndefined() throws {
5959
let some: JSUndefinedOr<[String: Int]> = .value(["n": 42])
60-
let undefined: JSUndefinedOr<[String: Int]> = .undefinedValue
60+
let undefined: JSUndefinedOr<[String: Int]> = .undefined
6161

6262
let returnedSome = try jsRoundTripUndefinedDictionary(some)
6363
switch returnedSome {

Tests/BridgeJSRuntimeTests/OptionalSupportTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ final class OptionalSupportTests: XCTestCase {
2323
XCTFail("Expected defined value")
2424
}
2525

26-
let undefined = try jsRoundTripOptionalStringUndefined(.undefinedValue)
26+
let undefined = try jsRoundTripOptionalStringUndefined(.undefined)
2727
if case .value = undefined {
2828
XCTFail("Expected undefined")
2929
}

0 commit comments

Comments
 (0)