diff --git a/Plugins/BridgeJS/Sources/BridgeJSBuildPlugin/BridgeJSBuildPlugin.swift b/Plugins/BridgeJS/Sources/BridgeJSBuildPlugin/BridgeJSBuildPlugin.swift index aec9f3bca..3cb6dc860 100644 --- a/Plugins/BridgeJS/Sources/BridgeJSBuildPlugin/BridgeJSBuildPlugin.swift +++ b/Plugins/BridgeJS/Sources/BridgeJSBuildPlugin/BridgeJSBuildPlugin.swift @@ -32,6 +32,15 @@ struct BridgeJSBuildPlugin: BuildToolPlugin { inputFiles.append(configFile) } + // Include Swift files generated by other plugins applied to this + // target (available in tools-version 6.0+). This lets BridgeJS + // process @JS annotations in files produced by earlier plugins + // without requiring any extra configuration. + let pluginGeneratedSwiftFiles = target.pluginGeneratedSources.filter { + $0.pathExtension == "swift" + } + inputFiles.append(contentsOf: pluginGeneratedSwiftFiles) + let inputTSFile = target.directoryURL.appending(path: "bridge-js.d.ts") let tsconfigPath = context.package.directoryURL.appending(path: "tsconfig.json") @@ -47,7 +56,6 @@ struct BridgeJSBuildPlugin: BuildToolPlugin { ] if FileManager.default.fileExists(atPath: inputTSFile.path) { - // Add .d.ts file and tsconfig.json as inputs inputFiles.append(contentsOf: [inputTSFile, tsconfigPath]) arguments.append(contentsOf: [ "--project", @@ -55,7 +63,8 @@ struct BridgeJSBuildPlugin: BuildToolPlugin { ]) } - arguments.append(contentsOf: inputSwiftFiles.map(\.path)) + let allSwiftFiles = inputSwiftFiles + pluginGeneratedSwiftFiles + arguments.append(contentsOf: allSwiftFiles.map(\.path)) return .buildCommand( displayName: "Generate BridgeJS code", diff --git a/Plugins/BridgeJS/Sources/BridgeJSTool/BridgeJSTool.swift b/Plugins/BridgeJS/Sources/BridgeJSTool/BridgeJSTool.swift index 3b784b732..f7adbfb8e 100644 --- a/Plugins/BridgeJS/Sources/BridgeJSTool/BridgeJSTool.swift +++ b/Plugins/BridgeJS/Sources/BridgeJSTool/BridgeJSTool.swift @@ -146,6 +146,7 @@ import BridgeJSUtilities var inputFiles = withSpan("Collecting Swift files") { return inputSwiftFiles(targetDirectory: targetDirectory, positionalArguments: positionalArguments) } + // BridgeJS.Macros.swift contains imported declarations (@JSFunction, @JSClass, etc.) that need // to be processed by SwiftToSkeleton to populate the imported skeleton. The command plugin // filters out Generated/ files, so we explicitly add it here after generation.