diff --git a/Plugins/BridgeJS/Sources/BridgeJSLink/BridgeJSLink.swift b/Plugins/BridgeJS/Sources/BridgeJSLink/BridgeJSLink.swift index af2456f8..fd907e8d 100644 --- a/Plugins/BridgeJS/Sources/BridgeJSLink/BridgeJSLink.swift +++ b/Plugins/BridgeJS/Sources/BridgeJSLink/BridgeJSLink.swift @@ -2947,6 +2947,16 @@ extension BridgeJSLink { "\(method.name)\(renderTSSignatureCallback(method.parameters, method.returnType, method.effects));" printer.write(methodSignature) } + + let sortedProperties = klass.properties.filter { !$0.isStatic }.sorted { + $0.name < $1.name + } + for property in sortedProperties { + let readonly = property.isReadonly ? "readonly " : "" + printer.write("\(readonly)\(property.name): \(property.type.tsType);") + } + + printer.write("release(): void;") } printer.write("}") } diff --git a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.Global.d.ts b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.Global.d.ts index 936ae6b3..b78f0cec 100644 --- a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.Global.d.ts +++ b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.Global.d.ts @@ -34,6 +34,7 @@ declare global { class Converter { constructor(); format(value: number): string; + release(): void; } } namespace Networking { @@ -41,6 +42,7 @@ declare global { class HTTPServer { constructor(); call(method: Networking.API.MethodTag): void; + release(): void; } const MethodValues: { readonly Get: 0; @@ -55,6 +57,7 @@ declare global { class TestServer { constructor(); call(method: Networking.APIV2.Internal.SupportedMethodTag): void; + release(): void; } const SupportedMethodValues: { readonly Get: 0; @@ -77,6 +80,8 @@ declare global { class Converter { constructor(); toString(value: number): string; + precision: number; + release(): void; } } } diff --git a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/MixedModules.d.ts b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/MixedModules.d.ts index 6f18e53e..88485232 100644 --- a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/MixedModules.d.ts +++ b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/MixedModules.d.ts @@ -11,6 +11,7 @@ declare global { class GlobalClass { constructor(); greet(): string; + release(): void; } function globalFunction(): string; } diff --git a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/Namespaces.Global.d.ts b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/Namespaces.Global.d.ts index 25ac1ac6..4b7851c3 100644 --- a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/Namespaces.Global.d.ts +++ b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/Namespaces.Global.d.ts @@ -12,6 +12,7 @@ declare global { constructor(); addItem(item: Greeter): void; getItems(): Greeter[]; + release(): void; } } namespace MyModule { @@ -24,6 +25,7 @@ declare global { class Converter { constructor(); toString(value: number): string; + release(): void; } } } @@ -32,9 +34,11 @@ declare global { class Greeter { constructor(name: string); greet(): string; + release(): void; } class UUID { uuidString(): string; + release(): void; } } } diff --git a/Tests/BridgeJSGlobalTests/Generated/BridgeJS.swift b/Tests/BridgeJSGlobalTests/Generated/BridgeJS.swift index ca996883..a892720c 100644 --- a/Tests/BridgeJSGlobalTests/Generated/BridgeJS.swift +++ b/Tests/BridgeJSGlobalTests/Generated/BridgeJS.swift @@ -296,6 +296,27 @@ public func _bjs_GlobalUtils_PublicConverter_toString(_ _self: UnsafeMutableRawP #endif } +@_expose(wasm, "bjs_GlobalUtils_PublicConverter_precision_get") +@_cdecl("bjs_GlobalUtils_PublicConverter_precision_get") +public func _bjs_GlobalUtils_PublicConverter_precision_get(_ _self: UnsafeMutableRawPointer) -> Int32 { + #if arch(wasm32) + let ret = GlobalUtils.PublicConverter.bridgeJSLiftParameter(_self).precision + return ret.bridgeJSLowerReturn() + #else + fatalError("Only available on WebAssembly") + #endif +} + +@_expose(wasm, "bjs_GlobalUtils_PublicConverter_precision_set") +@_cdecl("bjs_GlobalUtils_PublicConverter_precision_set") +public func _bjs_GlobalUtils_PublicConverter_precision_set(_ _self: UnsafeMutableRawPointer, _ value: Int32) -> Void { + #if arch(wasm32) + GlobalUtils.PublicConverter.bridgeJSLiftParameter(_self).precision = Int.bridgeJSLiftParameter(value) + #else + fatalError("Only available on WebAssembly") + #endif +} + @_expose(wasm, "bjs_GlobalUtils_PublicConverter_deinit") @_cdecl("bjs_GlobalUtils_PublicConverter_deinit") public func _bjs_GlobalUtils_PublicConverter_deinit(_ pointer: UnsafeMutableRawPointer) -> Void { diff --git a/Tests/BridgeJSGlobalTests/Generated/JavaScript/BridgeJS.json b/Tests/BridgeJSGlobalTests/Generated/JavaScript/BridgeJS.json index 2eeb8ed2..9403e3b0 100644 --- a/Tests/BridgeJSGlobalTests/Generated/JavaScript/BridgeJS.json +++ b/Tests/BridgeJSGlobalTests/Generated/JavaScript/BridgeJS.json @@ -156,7 +156,19 @@ "GlobalUtils" ], "properties" : [ + { + "isReadonly" : false, + "isStatic" : false, + "name" : "precision", + "namespace" : [ + "GlobalUtils" + ], + "type" : { + "int" : { + } + } + } ], "swiftCallName" : "GlobalUtils.PublicConverter" } diff --git a/Tests/BridgeJSGlobalTests/GlobalAPITests.swift b/Tests/BridgeJSGlobalTests/GlobalAPITests.swift index 19087ff5..9bdb5c5e 100644 --- a/Tests/BridgeJSGlobalTests/GlobalAPITests.swift +++ b/Tests/BridgeJSGlobalTests/GlobalAPITests.swift @@ -63,6 +63,8 @@ enum Internal { @JS enum GlobalUtils { @JS class PublicConverter { + @JS var precision: Int = 2 + @JS init() {} @JS func toString(value: Int) -> String { diff --git a/Tests/prelude.mjs b/Tests/prelude.mjs index 3aeb10a8..0170da3b 100644 --- a/Tests/prelude.mjs +++ b/Tests/prelude.mjs @@ -1032,6 +1032,9 @@ function BridgeJSGlobalTests_runJsWorksGlobal() { const globalConverter = new globalThis.GlobalUtils.PublicConverter(); assert.equal(globalConverter.toString(99), "99"); + assert.equal(globalConverter.precision, 2); + globalConverter.precision = 5; + assert.equal(globalConverter.precision, 5); globalConverter.release(); const globalHttpServer = new globalThis.GlobalNetworking.API.TestHTTPServer();