@thelacanians/vue-native-cli 0.4.15 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +329 -15
- package/native/android/VueNativeCore/src/main/kotlin/com/vuenative/core/Bridge/NativeBridge.kt +118 -0
- package/native/android/VueNativeCore/src/main/kotlin/com/vuenative/core/Components/Factories/VViewFactory.kt +178 -1
- package/native/android/VueNativeCore/src/main/kotlin/com/vuenative/core/Modules/GeneratedModuleRegistry.kt +28 -0
- package/native/android/VueNativeCore/src/main/kotlin/com/vuenative/core/Modules/NativeModuleRegistry.kt +3 -0
- package/native/android/VueNativeCore/src/test/kotlin/com/vuenative/core/ComponentFactoryTest.kt +674 -0
- package/native/android/VueNativeCore/src/test/kotlin/com/vuenative/core/ErrorOverlayViewTest.kt +183 -0
- package/native/android/VueNativeCore/src/test/kotlin/com/vuenative/core/EventThrottleTest.kt +203 -0
- package/native/android/VueNativeCore/src/test/kotlin/com/vuenative/core/HotReloadManagerTest.kt +162 -0
- package/native/android/VueNativeCore/src/test/kotlin/com/vuenative/core/JSPolyfillsTest.kt +153 -0
- package/native/android/VueNativeCore/src/test/kotlin/com/vuenative/core/NativeBridgeTest.kt +6 -3
- package/native/android/VueNativeCore/src/test/kotlin/com/vuenative/core/NativeModuleTest.kt +475 -0
- package/native/android/gradle.properties +1 -0
- package/native/android/gradlew +1 -1
- package/native/ios/VueNativeCore/Package.swift +1 -1
- package/native/ios/VueNativeCore/Sources/VueNativeCore/Bridge/EventThrottle.swift +1 -0
- package/native/ios/VueNativeCore/Sources/VueNativeCore/Bridge/NativeBridge.swift +143 -5
- package/native/ios/VueNativeCore/Sources/VueNativeCore/Components/Factories/VTextFactory.swift +43 -0
- package/native/ios/VueNativeCore/Sources/VueNativeCore/Components/Factories/VViewFactory.swift +116 -4
- package/native/ios/VueNativeCore/Sources/VueNativeCore/Helpers/GestureWrapper.swift +100 -0
- package/native/ios/VueNativeCore/Sources/VueNativeCore/Modules/GeneratedModuleRegistry.swift +28 -0
- package/native/ios/VueNativeCore/Sources/VueNativeCore/Modules/NativeModuleRegistry.swift +3 -0
- package/native/ios/VueNativeCore/Tests/VueNativeCoreTests/CertificatePinningTests.swift +190 -0
- package/native/ios/VueNativeCore/Tests/VueNativeCoreTests/ComponentFactoryTests.swift +585 -0
- package/native/ios/VueNativeCore/Tests/VueNativeCoreTests/EventThrottleTests.swift +161 -0
- package/native/ios/VueNativeCore/Tests/VueNativeCoreTests/HotReloadManagerTests.swift +88 -0
- package/native/ios/VueNativeCore/Tests/VueNativeCoreTests/JSPolyfillsTests.swift +319 -0
- package/native/ios/VueNativeCore/Tests/VueNativeCoreTests/NativeModuleTests.swift +400 -0
- package/native/macos/VueNativeMacOS/Package.swift +34 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Bridge/ErrorOverlayView.swift +112 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Bridge/EventThrottle.swift +58 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Bridge/HotReloadManager.swift +153 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Bridge/JSPolyfills.swift +696 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Bridge/JSRuntime.swift +347 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Bridge/NativeBridge.swift +877 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Bridge/VueNativeWindowController.swift +125 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/ComponentRegistry.swift +209 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VActionSheetFactory.swift +155 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VActivityIndicatorFactory.swift +85 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VAlertDialogFactory.swift +132 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VButtonFactory.swift +83 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VCheckboxFactory.swift +108 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VDropdownFactory.swift +155 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VImageFactory.swift +270 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VInputFactory.swift +257 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VKeyboardAvoidingFactory.swift +22 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VListFactory.swift +324 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VModalFactory.swift +231 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VOutlineViewFactory.swift +276 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VPickerFactory.swift +134 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VPressableFactory.swift +120 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VProgressBarFactory.swift +71 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VRadioFactory.swift +193 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VRefreshControlFactory.swift +25 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VSafeAreaFactory.swift +46 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VScrollViewFactory.swift +190 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VSectionListFactory.swift +374 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VSegmentedControlFactory.swift +125 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VSliderFactory.swift +131 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VSplitViewFactory.swift +215 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VStatusBarFactory.swift +25 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VSwitchFactory.swift +92 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VTextFactory.swift +336 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VToolbarFactory.swift +212 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VVideoFactory.swift +245 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VViewFactory.swift +314 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/Factories/VWebViewFactory.swift +162 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Components/NativeComponentFactory.swift +54 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Helpers/ClickableView.swift +100 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Helpers/Extensions.swift +23 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Helpers/GestureWrapper.swift +183 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Helpers/NSColor+Hex.swift +78 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Layout/FlippedView.swift +19 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Layout/LayoutNode.swift +493 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Modules/AnimationModule.swift +354 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Modules/AppStateModule.swift +62 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Modules/BiometryModule.swift +60 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Modules/CameraModule.swift +167 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Modules/ClipboardModule.swift +34 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Modules/DeviceInfoModule.swift +49 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Modules/DragDropModule.swift +50 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Modules/FileDialogModule.swift +86 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Modules/HapticsModule.swift +42 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Modules/KeyboardModule.swift +28 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Modules/LinkingModule.swift +49 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Modules/MenuModule.swift +95 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Modules/NativeModuleRegistry.swift +63 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Modules/NotificationsModule.swift +112 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Modules/PermissionsModule.swift +149 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Modules/ShareModule.swift +37 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Modules/WindowModule.swift +71 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Resources/vue-native-placeholder.js +2 -0
- package/native/macos/VueNativeMacOS/Sources/VueNativeMacOS/Styling/StyleEngine.swift +885 -0
- package/native/macos/VueNativeMacOS/Tests/VueNativeMacOSTests/ComponentFactoryTests.swift +80 -0
- package/native/macos/VueNativeMacOS/Tests/VueNativeMacOSTests/VueNativeMacOSTests.swift +149 -0
- package/native/shared/VueNativeShared/AGENTS.md +129 -0
- package/native/shared/VueNativeShared/Package.swift +14 -0
- package/native/shared/VueNativeShared/Sources/VueNativeShared/CertificatePinning.swift +134 -0
- package/native/shared/VueNativeShared/Sources/VueNativeShared/EventThrottle.swift +78 -0
- package/native/shared/VueNativeShared/Sources/VueNativeShared/HotReloadManager.swift +162 -0
- package/native/shared/VueNativeShared/Sources/VueNativeShared/JSRuntime.swift +412 -0
- package/native/shared/VueNativeShared/Sources/VueNativeShared/Modules/AsyncStorageModule.swift +68 -0
- package/native/shared/VueNativeShared/Sources/VueNativeShared/Modules/AudioModule.swift +359 -0
- package/native/shared/VueNativeShared/Sources/VueNativeShared/Modules/DatabaseModule.swift +259 -0
- package/native/shared/VueNativeShared/Sources/VueNativeShared/Modules/FileSystemModule.swift +233 -0
- package/native/shared/VueNativeShared/Sources/VueNativeShared/Modules/GeolocationModule.swift +156 -0
- package/native/shared/VueNativeShared/Sources/VueNativeShared/Modules/NetworkModule.swift +59 -0
- package/native/shared/VueNativeShared/Sources/VueNativeShared/Modules/PerformanceModule.swift +113 -0
- package/native/shared/VueNativeShared/Sources/VueNativeShared/Modules/SecureStorageModule.swift +119 -0
- package/native/shared/VueNativeShared/Sources/VueNativeShared/Modules/WebSocketModule.swift +212 -0
- package/native/shared/VueNativeShared/Sources/VueNativeShared/NativeEventDispatcher.swift +6 -0
- package/native/shared/VueNativeShared/Sources/VueNativeShared/NativeModule.swift +26 -0
- package/native/shared/VueNativeShared/Sources/VueNativeShared/NativeModuleRegistry.swift +37 -0
- package/native/shared/VueNativeShared/Sources/VueNativeShared/SharedJSPolyfills.swift +673 -0
- package/native/shared/VueNativeShared/Tests/VueNativeSharedTests/VueNativeSharedTests.swift +44 -0
- package/package.json +8 -2
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import AppKit
|
|
3
|
+
|
|
4
|
+
/// Manages a WebSocket connection to the Vue Native dev server for hot reload.
|
|
5
|
+
/// When a new bundle is broadcast, triggers a full app reload via NativeBridge.
|
|
6
|
+
///
|
|
7
|
+
/// Usage in your app (debug builds only):
|
|
8
|
+
/// ```swift
|
|
9
|
+
/// #if DEBUG
|
|
10
|
+
/// HotReloadManager.shared.connect(to: URL(string: "ws://localhost:8174")!)
|
|
11
|
+
/// #endif
|
|
12
|
+
/// ```
|
|
13
|
+
public final class HotReloadManager: NSObject, URLSessionWebSocketDelegate {
|
|
14
|
+
|
|
15
|
+
public static let shared = HotReloadManager()
|
|
16
|
+
|
|
17
|
+
private var webSocketTask: URLSessionWebSocketTask?
|
|
18
|
+
private var session: URLSession?
|
|
19
|
+
private var serverURL: URL?
|
|
20
|
+
private var isConnecting = false
|
|
21
|
+
private var reconnectAttempts = 0
|
|
22
|
+
private let maxReconnectAttempts = 10
|
|
23
|
+
|
|
24
|
+
private override init() {
|
|
25
|
+
super.init()
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// MARK: - Public API
|
|
29
|
+
|
|
30
|
+
/// Connect to the dev server. Safe to call multiple times.
|
|
31
|
+
public func connect(to url: URL) {
|
|
32
|
+
serverURL = url
|
|
33
|
+
reconnectAttempts = 0
|
|
34
|
+
scheduleConnect(delay: 0)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/// Disconnect and stop reconnecting.
|
|
38
|
+
public func disconnect() {
|
|
39
|
+
serverURL = nil
|
|
40
|
+
webSocketTask?.cancel(with: .goingAway, reason: nil)
|
|
41
|
+
webSocketTask = nil
|
|
42
|
+
session?.invalidateAndCancel()
|
|
43
|
+
session = nil
|
|
44
|
+
NSLog("[VueNative macOS HotReload] Disconnected")
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// MARK: - Connection
|
|
48
|
+
|
|
49
|
+
private func scheduleConnect(delay: TimeInterval) {
|
|
50
|
+
guard serverURL != nil, !isConnecting else { return }
|
|
51
|
+
isConnecting = true
|
|
52
|
+
DispatchQueue.main.asyncAfter(deadline: .now() + delay) { [weak self] in
|
|
53
|
+
self?.openConnection()
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
private func openConnection() {
|
|
58
|
+
guard let url = serverURL else {
|
|
59
|
+
isConnecting = false
|
|
60
|
+
return
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
session?.invalidateAndCancel()
|
|
64
|
+
let config = URLSessionConfiguration.default
|
|
65
|
+
config.timeoutIntervalForRequest = 5
|
|
66
|
+
session = URLSession(configuration: config, delegate: self, delegateQueue: .main)
|
|
67
|
+
|
|
68
|
+
webSocketTask = session?.webSocketTask(with: url)
|
|
69
|
+
webSocketTask?.resume()
|
|
70
|
+
NSLog("[VueNative macOS HotReload] Connecting to \(url)...")
|
|
71
|
+
receiveNextMessage()
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// MARK: - Message Handling
|
|
75
|
+
|
|
76
|
+
private func receiveNextMessage() {
|
|
77
|
+
webSocketTask?.receive { [weak self] result in
|
|
78
|
+
guard let self = self else { return }
|
|
79
|
+
switch result {
|
|
80
|
+
case .success(let message):
|
|
81
|
+
self.handleMessage(message)
|
|
82
|
+
self.receiveNextMessage()
|
|
83
|
+
case .failure(let error):
|
|
84
|
+
NSLog("[VueNative macOS HotReload] Receive error: \(error.localizedDescription)")
|
|
85
|
+
self.scheduleReconnect()
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
private func handleMessage(_ message: URLSessionWebSocketTask.Message) {
|
|
91
|
+
let text: String
|
|
92
|
+
switch message {
|
|
93
|
+
case .string(let s): text = s
|
|
94
|
+
case .data(let d): text = String(data: d, encoding: .utf8) ?? ""
|
|
95
|
+
@unknown default: return
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
guard let data = text.data(using: .utf8),
|
|
99
|
+
let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
|
|
100
|
+
let type = json["type"] as? String else {
|
|
101
|
+
return
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
switch type {
|
|
105
|
+
case "connected":
|
|
106
|
+
isConnecting = false
|
|
107
|
+
reconnectAttempts = 0
|
|
108
|
+
NSLog("[VueNative macOS HotReload] Connected -- hot reload active")
|
|
109
|
+
|
|
110
|
+
case "bundle":
|
|
111
|
+
guard let bundle = json["bundle"] as? String else { return }
|
|
112
|
+
NSLog("[VueNative macOS HotReload] Received bundle (\(bundle.count) bytes) -- reloading...")
|
|
113
|
+
DispatchQueue.main.async {
|
|
114
|
+
NativeBridge.shared.reloadWithBundle(bundle)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
case "ping":
|
|
118
|
+
let pong = "{\"type\":\"pong\"}"
|
|
119
|
+
webSocketTask?.send(.string(pong)) { _ in }
|
|
120
|
+
|
|
121
|
+
default:
|
|
122
|
+
break
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// MARK: - Reconnection
|
|
127
|
+
|
|
128
|
+
private func scheduleReconnect() {
|
|
129
|
+
guard serverURL != nil else { return }
|
|
130
|
+
reconnectAttempts += 1
|
|
131
|
+
if reconnectAttempts > maxReconnectAttempts {
|
|
132
|
+
NSLog("[VueNative macOS HotReload] Giving up after %d attempts", maxReconnectAttempts)
|
|
133
|
+
disconnect()
|
|
134
|
+
return
|
|
135
|
+
}
|
|
136
|
+
isConnecting = false
|
|
137
|
+
NSLog("[VueNative macOS HotReload] Reconnecting in 2s... (attempt %d/%d)", reconnectAttempts, maxReconnectAttempts)
|
|
138
|
+
scheduleConnect(delay: 2.0)
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// MARK: - URLSessionWebSocketDelegate
|
|
142
|
+
|
|
143
|
+
public func urlSession(_ session: URLSession, webSocketTask: URLSessionWebSocketTask,
|
|
144
|
+
didOpenWithProtocol protocol: String?) {
|
|
145
|
+
NSLog("[VueNative macOS HotReload] WebSocket opened")
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
public func urlSession(_ session: URLSession, webSocketTask: URLSessionWebSocketTask,
|
|
149
|
+
didCloseWith closeCode: URLSessionWebSocketTask.CloseCode, reason: Data?) {
|
|
150
|
+
NSLog("[VueNative macOS HotReload] WebSocket closed (code: \(closeCode.rawValue))")
|
|
151
|
+
scheduleReconnect()
|
|
152
|
+
}
|
|
153
|
+
}
|