Skip to content

Commit 937fcee

Browse files
committed
async esbuild plugins
1 parent 1bdc9f9 commit 937fcee

File tree

11 files changed

+1144
-994
lines changed

11 files changed

+1144
-994
lines changed

Sources/SwiftTSGo/ESBuildBuild.swift

Lines changed: 261 additions & 237 deletions
Large diffs are not rendered by default.

Sources/SwiftTSGo/ESBuildPlugin.swift

Lines changed: 63 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import Foundation
22

3+
public typealias PluginData = any Sendable
4+
35
// MARK: - ResolveKind
46

5-
public enum ESBuildPluginResolveKind: CaseIterable {
7+
public enum ESBuildPluginResolveKind: CaseIterable, Sendable {
68
case entryPoint
79
case importStatement
810
case requireCall
@@ -11,20 +13,20 @@ public enum ESBuildPluginResolveKind: CaseIterable {
1113
case importRule
1214
case composesFrom
1315
case urlToken
14-
16+
1517
var cValue: Int32 {
1618
switch self {
17-
case .entryPoint: return 0
18-
case .importStatement: return 1
19-
case .requireCall: return 2
20-
case .dynamicImport: return 3
21-
case .requireResolve: return 4
22-
case .importRule: return 5
23-
case .composesFrom: return 6
24-
case .urlToken: return 7
19+
case .entryPoint: 0
20+
case .importStatement: 1
21+
case .requireCall: 2
22+
case .dynamicImport: 3
23+
case .requireResolve: 4
24+
case .importRule: 5
25+
case .composesFrom: 6
26+
case .urlToken: 7
2527
}
2628
}
27-
29+
2830
init?(cValue: Int32) {
2931
switch cValue {
3032
case 0: self = .entryPoint
@@ -42,14 +44,14 @@ public enum ESBuildPluginResolveKind: CaseIterable {
4244

4345
// MARK: - Location
4446

45-
public struct ESBuildPluginLocation {
47+
public struct ESBuildPluginLocation: Sendable {
4648
public let file: String
4749
public let namespace: String
4850
public let line: Int // 1-based
4951
public let column: Int // 0-based
5052
public let length: Int
5153
public let lineText: String
52-
54+
5355
public init(
5456
column: Int,
5557
file: String,
@@ -69,11 +71,11 @@ public struct ESBuildPluginLocation {
6971

7072
// MARK: - Message
7173

72-
public struct ESBuildPluginMessage {
74+
public struct ESBuildPluginMessage: @unchecked Sendable {
7375
public let text: String
7476
public let location: ESBuildPluginLocation?
7577
public let detail: Any?
76-
78+
7779
public init(
7880
detail: Any? = nil,
7981
location: ESBuildPluginLocation? = nil,
@@ -87,21 +89,21 @@ public struct ESBuildPluginMessage {
8789

8890
// MARK: - OnResolveArgs
8991

90-
public struct ESBuildOnResolveArgs {
92+
public struct ESBuildOnResolveArgs: Sendable {
9193
public let path: String
9294
public let importer: String
9395
public let namespace: String
9496
public let resolveDir: String
9597
public let kind: ESBuildPluginResolveKind
96-
public let pluginData: Any?
98+
public let pluginData: PluginData?
9799
public let with: [String: String]
98-
100+
99101
public init(
100102
importer: String,
101103
kind: ESBuildPluginResolveKind,
102104
namespace: String,
103105
path: String,
104-
pluginData: Any? = nil,
106+
pluginData: PluginData? = nil,
105107
resolveDir: String,
106108
with: [String: String] = [:]
107109
) {
@@ -117,17 +119,17 @@ public struct ESBuildOnResolveArgs {
117119

118120
// MARK: - OnLoadArgs
119121

120-
public struct ESBuildOnLoadArgs {
122+
public struct ESBuildOnLoadArgs: Sendable {
121123
public let path: String
122124
public let namespace: String
123125
public let suffix: String
124-
public let pluginData: Any?
126+
public let pluginData: PluginData?
125127
public let with: [String: String]
126-
128+
127129
public init(
128130
namespace: String,
129131
path: String,
130-
pluginData: Any? = nil,
132+
pluginData: PluginData? = nil,
131133
suffix: String = "",
132134
with: [String: String] = [:]
133135
) {
@@ -141,25 +143,25 @@ public struct ESBuildOnLoadArgs {
141143

142144
// MARK: - OnResolveResult
143145

144-
public struct ESBuildOnResolveResult {
146+
public struct ESBuildOnResolveResult: Sendable {
145147
public let path: String?
146148
public let namespace: String?
147149
public let external: Bool?
148150
public let sideEffects: Bool?
149151
public let suffix: String?
150-
public let pluginData: Any?
152+
public let pluginData: PluginData?
151153
public let pluginName: String?
152154
public let errors: [ESBuildPluginMessage]
153155
public let warnings: [ESBuildPluginMessage]
154156
public let watchFiles: [String]
155157
public let watchDirs: [String]
156-
158+
157159
public init(
158160
errors: [ESBuildPluginMessage] = [],
159161
external: Bool? = nil,
160162
namespace: String? = nil,
161163
path: String? = nil,
162-
pluginData: Any? = nil,
164+
pluginData: PluginData? = nil,
163165
pluginName: String? = nil,
164166
sideEffects: Bool? = nil,
165167
suffix: String? = nil,
@@ -183,22 +185,22 @@ public struct ESBuildOnResolveResult {
183185

184186
// MARK: - OnLoadResult
185187

186-
public struct ESBuildOnLoadResult {
188+
public struct ESBuildOnLoadResult: Sendable {
187189
public let contents: Data?
188190
public let loader: ESBuildLoader?
189191
public let resolveDir: String?
190-
public let pluginData: Any?
192+
public let pluginData: PluginData?
191193
public let pluginName: String?
192194
public let errors: [ESBuildPluginMessage]
193195
public let warnings: [ESBuildPluginMessage]
194196
public let watchFiles: [String]
195197
public let watchDirs: [String]
196-
198+
197199
public init(
198200
contents: Data? = nil,
199201
errors: [ESBuildPluginMessage] = [],
200202
loader: ESBuildLoader? = nil,
201-
pluginData: Any? = nil,
203+
pluginData: PluginData? = nil,
202204
pluginName: String? = nil,
203205
resolveDir: String? = nil,
204206
warnings: [ESBuildPluginMessage] = [],
@@ -215,12 +217,12 @@ public struct ESBuildOnLoadResult {
215217
self.watchDirs = watchDirs
216218
self.watchFiles = watchFiles
217219
}
218-
220+
219221
public init(
220222
contents: String,
221223
errors: [ESBuildPluginMessage] = [],
222224
loader: ESBuildLoader? = nil,
223-
pluginData: Any? = nil,
225+
pluginData: PluginData? = nil,
224226
pluginName: String? = nil,
225227
resolveDir: String? = nil,
226228
warnings: [ESBuildPluginMessage] = [],
@@ -243,11 +245,11 @@ public struct ESBuildOnLoadResult {
243245

244246
// MARK: - Plugin
245247

246-
public struct ESBuildPlugin {
248+
public struct ESBuildPlugin: @unchecked Sendable {
247249
public let name: String
248-
public let setup: (ESBuildPluginBuild) -> Void
249-
250-
public init(name: String, setup: @escaping (ESBuildPluginBuild) -> Void) {
250+
public let setup: @Sendable (ESBuildPluginBuild) -> Void
251+
252+
public init(name: String, setup: @escaping @Sendable (ESBuildPluginBuild) -> Void) {
251253
self.name = name
252254
self.setup = setup
253255
}
@@ -259,36 +261,36 @@ public protocol ESBuildPluginBuild {
259261
func onResolve(
260262
filter: String,
261263
namespace: String?,
262-
callback: @escaping (ESBuildOnResolveArgs) -> ESBuildOnResolveResult?
264+
callback: @escaping @Sendable (ESBuildOnResolveArgs) async -> ESBuildOnResolveResult?
263265
)
264-
266+
265267
func onLoad(
266268
filter: String,
267269
namespace: String?,
268-
callback: @escaping (ESBuildOnLoadArgs) -> ESBuildOnLoadResult?
270+
callback: @escaping @Sendable (ESBuildOnLoadArgs) async -> ESBuildOnLoadResult?
269271
)
270-
271-
func onStart(callback: @escaping () -> Void)
272-
func onEnd(callback: @escaping () -> Void)
272+
273+
func onStart(callback: @escaping @Sendable () async -> Void)
274+
func onEnd(callback: @escaping @Sendable () async -> Void)
273275
func onDispose(callback: @escaping () -> Void)
274-
276+
275277
func resolve(path: String, options: ESBuildResolveOptions) -> ESBuildResolveResult
276278
}
277279

278280
// MARK: - ResolveOptions
279281

280-
public struct ESBuildResolveOptions {
282+
public struct ESBuildResolveOptions: Sendable {
281283
public let importer: String?
282284
public let namespace: String?
283285
public let resolveDir: String?
284286
public let kind: ESBuildPluginResolveKind?
285-
public let pluginData: Any?
286-
287+
public let pluginData: PluginData?
288+
287289
public init(
288290
importer: String? = nil,
289291
kind: ESBuildPluginResolveKind? = nil,
290292
namespace: String? = nil,
291-
pluginData: Any? = nil,
293+
pluginData: PluginData? = nil,
292294
resolveDir: String? = nil
293295
) {
294296
self.importer = importer
@@ -301,18 +303,18 @@ public struct ESBuildResolveOptions {
301303

302304
// MARK: - Default Plugins
303305

304-
extension ESBuildPlugin {
305-
public static func reactGlobalTransform(globalName: String = "_FLICKCORE_$REACT") -> ESBuildPlugin {
306-
return ESBuildPlugin(name: "react-global-transform") { build in
307-
build.onResolve(filter: "^react$", namespace: nil) { args in
308-
return ESBuildOnResolveResult(
306+
public extension ESBuildPlugin {
307+
static func reactGlobalTransform(globalName: String = "_FLICKCORE_$REACT") -> ESBuildPlugin {
308+
ESBuildPlugin(name: "react-global-transform") { build in
309+
build.onResolve(filter: "^react$", namespace: nil) { _ in
310+
ESBuildOnResolveResult(
309311
namespace: "use-flick-react-global",
310312
path: "react"
311313
)
312314
}
313-
314-
build.onLoad(filter: ".*", namespace: "use-flick-react-global") { args in
315-
return ESBuildOnLoadResult(
315+
316+
build.onLoad(filter: ".*", namespace: "use-flick-react-global") { _ in
317+
ESBuildOnLoadResult(
316318
contents: "module.exports = \(globalName)",
317319
loader: .js
318320
)
@@ -323,22 +325,22 @@ extension ESBuildPlugin {
323325

324326
// MARK: - ResolveResult
325327

326-
public struct ESBuildResolveResult {
328+
public struct ESBuildResolveResult: Sendable {
327329
public let path: String
328330
public let namespace: String
329331
public let suffix: String
330332
public let external: Bool
331333
public let sideEffects: Bool
332-
public let pluginData: Any?
334+
public let pluginData: PluginData?
333335
public let errors: [ESBuildPluginMessage]
334336
public let warnings: [ESBuildPluginMessage]
335-
337+
336338
public init(
337339
errors: [ESBuildPluginMessage] = [],
338340
external: Bool = false,
339341
namespace: String = "file",
340342
path: String,
341-
pluginData: Any? = nil,
343+
pluginData: PluginData? = nil,
342344
sideEffects: Bool = false,
343345
suffix: String = "",
344346
warnings: [ESBuildPluginMessage] = []
@@ -352,4 +354,4 @@ public struct ESBuildResolveResult {
352354
self.suffix = suffix
353355
self.warnings = warnings
354356
}
355-
}
357+
}

0 commit comments

Comments
 (0)