@applicaster/quick-brick-native-apple 5.15.0 → 5.16.1
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/apple/QuickBrickApple.podspec.json +4 -4
- package/apple/ios/LocalNotifications/ReactNativeManager+UNUserNotificationCenterDelegate.swift +7 -5
- package/apple/ios/ReactNative/PushBridge.swift +11 -11
- package/apple/ios/ReactNative/QuickBrickExceptionManager.swift +22 -20
- package/apple/ios/ReactNative/QuickBrickViewController.swift +15 -20
- package/apple/ios/ReactNative/ReactNativeManageriOS+UIApplicationDelegate.swift +15 -18
- package/apple/ios/ReactNativeEventEmitter.swift +19 -21
- package/apple/tvos/Helpers/FocusableGroupManager/FocusableGroupManager.swift +39 -39
- package/apple/tvos/Helpers/FocusableGroupManager/FocusableManagerModule.swift +18 -23
- package/apple/tvos/LocalNotifications/ReactNativeManager+UNUserNotificationCenterDelegate.swift +4 -3
- package/apple/tvos/ReactNative/QuickBrickViewController.swift +3 -3
- package/apple/tvos/Views/FocusableGroupView/FocusableGroupView.swift +118 -114
- package/apple/tvos/Views/FocusableGroupView/FocusableGroupViewConsts.swift +19 -19
- package/apple/tvos/Views/FocusableGroupView/FocusableGroupViewModule.swift +10 -10
- package/apple/tvos/Views/FocusableView/FocusableView+ParallaxViewDelegate.swift +14 -20
- package/apple/tvos/Views/FocusableView/FocusableView.swift +38 -40
- package/apple/tvos/Views/FocusableView/FocusableViewModule.swift +8 -9
- package/apple/tvos/Views/ParallaxView/Extensions/ParallaxableView+Extensions.swift +20 -26
- package/apple/tvos/Views/ParallaxView/Extensions/UIView+ParallaxEffect.swift +26 -28
- package/apple/tvos/Views/ParallaxView/Other/ParallaxEffectOptions.swift +5 -9
- package/apple/tvos/Views/ParallaxView/Other/ParallaxMotionEffect.swift +8 -12
- package/apple/tvos/Views/ParallaxView/Other/ParallaxableView.swift +0 -2
- package/apple/tvos/Views/ParallaxView/ParallaxCollectionViewCell.swift +17 -19
- package/apple/tvos/Views/ParallaxView/ParallaxView.swift +29 -31
- package/apple/tvos/Views/ParallaxView/Protocols/ParallaxViewDelegate.swift +6 -7
- package/apple/universal/ReactNative/AnalyticsBridge.swift +3 -3
- package/apple/universal/ReactNative/LocalNotification/LocalNotificationBridge.swift +8 -6
- package/apple/universal/ReactNative/OfflineAssetsBridge.swift +22 -15
- package/apple/universal/ReactNative/PluginsManagerBridge.swift +20 -15
- package/apple/universal/ReactNative/ReactNativeCommunicationModule.swift +15 -13
- package/apple/universal/ReactNative/ReactNativeManager+UIApplicationDelegate.swift +10 -9
- package/apple/universal/ReactNative/ReactNativeManager.swift +12 -9
- package/apple/universal/Storages/LocalStorage/LocalStorageBridge.swift +35 -20
- package/apple/universal/Storages/SessionStorage/SessionStorageBridge.swift +20 -12
- package/apple/universal/Utils/RTLLocales.swift +5 -5
- package/apple/universal/Utils/XrayLoggerTemplates/QuickBrickViewControllerLogs.swift +0 -2
- package/apple/universal/Utils/XrayLoggerTemplates/ReactNativeManagerLogs.swift +0 -1
- package/package.json +1 -1
|
@@ -58,7 +58,8 @@ open class ReactNativeManager: NSObject, UserInterfaceLayerProtocol, UserInterfa
|
|
|
58
58
|
if reactNativePackagerRoot == "dev" ||
|
|
59
59
|
reactNativePackagerRoot == "localhost" ||
|
|
60
60
|
reactNativePackagerRoot == "localhost:8081" ||
|
|
61
|
-
reactNativePackagerRoot.isIPv4WithPort
|
|
61
|
+
reactNativePackagerRoot.isIPv4WithPort
|
|
62
|
+
{
|
|
62
63
|
retVal = true
|
|
63
64
|
}
|
|
64
65
|
|
|
@@ -73,7 +74,8 @@ open class ReactNativeManager: NSObject, UserInterfaceLayerProtocol, UserInterfa
|
|
|
73
74
|
// MARK: UserInterfaceLayerProtocol
|
|
74
75
|
|
|
75
76
|
public required init(launchOptions: [UIApplication.LaunchOptionsKey: Any]?,
|
|
76
|
-
applicationData: [String: Any] = [:])
|
|
77
|
+
applicationData: [String: Any] = [:])
|
|
78
|
+
{
|
|
77
79
|
super.init()
|
|
78
80
|
self.launchOptions = launchOptions
|
|
79
81
|
|
|
@@ -95,7 +97,7 @@ open class ReactNativeManager: NSObject, UserInterfaceLayerProtocol, UserInterfa
|
|
|
95
97
|
|
|
96
98
|
#if os(iOS)
|
|
97
99
|
public func currentOrientationMask() -> UIInterfaceOrientationMask? {
|
|
98
|
-
|
|
100
|
+
rootViewController?.orientationStack.last
|
|
99
101
|
}
|
|
100
102
|
#endif
|
|
101
103
|
|
|
@@ -129,7 +131,8 @@ open class ReactNativeManager: NSObject, UserInterfaceLayerProtocol, UserInterfa
|
|
|
129
131
|
self.reactRootView = RCTRootView(
|
|
130
132
|
bridge: reactBridge,
|
|
131
133
|
moduleName: kQBModuleName,
|
|
132
|
-
initialProperties: nil
|
|
134
|
+
initialProperties: nil
|
|
135
|
+
)
|
|
133
136
|
}
|
|
134
137
|
|
|
135
138
|
reactRootView?.backgroundColor = UIColor.clear
|
|
@@ -156,7 +159,7 @@ extension ReactNativeManager: RCTBridgeDelegate {
|
|
|
156
159
|
- parameter bridge: RCTBridge instance used to launch react
|
|
157
160
|
- returns: url of the react code (server or bundle file)
|
|
158
161
|
*/
|
|
159
|
-
public func sourceURL(for
|
|
162
|
+
public func sourceURL(for _: RCTBridge?) -> URL? {
|
|
160
163
|
// https://github.com/facebook/react-native/issues/21030#issuecomment-471344543
|
|
161
164
|
if shouldUseReactServer {
|
|
162
165
|
RCTBundleURLProvider.sharedSettings()?.jsLocation = jsBundleUrl?.host
|
|
@@ -172,7 +175,7 @@ extension ReactNativeManager: RCTBridgeDelegate {
|
|
|
172
175
|
}
|
|
173
176
|
|
|
174
177
|
#if os(iOS)
|
|
175
|
-
public func extraModules(for
|
|
178
|
+
public func extraModules(for _: RCTBridge!) -> [RCTBridgeModule]! {
|
|
176
179
|
let qbExceptionManager = QuickBrickExceptionManager()
|
|
177
180
|
let rctException = RCTExceptionsManager(delegate: qbExceptionManager)
|
|
178
181
|
|
|
@@ -194,11 +197,11 @@ extension ReactNativeManager: QuickBrickManagerDelegate {
|
|
|
194
197
|
}
|
|
195
198
|
}
|
|
196
199
|
|
|
197
|
-
public func setPrefersHomeIndicatorAutoHidden(_ payload:
|
|
200
|
+
public func setPrefersHomeIndicatorAutoHidden(_ payload: [String: Any]) {
|
|
198
201
|
FacadeConnector.connector?.uiLayer?.setPrefersHomeIndicatorAutoHidden(autoHidden: payload["autoHidden"] as? Bool ?? true)
|
|
199
202
|
}
|
|
200
203
|
|
|
201
|
-
public func allowOrientationForScreen(_ payload:
|
|
204
|
+
public func allowOrientationForScreen(_ payload: [String: Any]) {
|
|
202
205
|
if let qbViewController = reactNativeViewController() as? QuickBrickViewController, let orientation = payload["orientation"] as? Int {
|
|
203
206
|
qbViewController.allowOrientationForScreen(orientation)
|
|
204
207
|
}
|
|
@@ -209,7 +212,7 @@ extension ReactNativeManager: QuickBrickManagerDelegate {
|
|
|
209
212
|
- parameter manager: instance of the native module on which the event handler should be invoked
|
|
210
213
|
- parameter payload: dictionary of options to pass to the event handler
|
|
211
214
|
*/
|
|
212
|
-
public func idleTimerDisabled(_ payload:
|
|
215
|
+
public func idleTimerDisabled(_ payload: [String: Any]) {
|
|
213
216
|
guard let disabled = payload["disabled"] as? Bool else {
|
|
214
217
|
UIApplication.shared.isIdleTimerDisabled = false
|
|
215
218
|
return
|
|
@@ -15,19 +15,19 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
15
15
|
var bridge: RCTBridge!
|
|
16
16
|
|
|
17
17
|
static func moduleName() -> String! {
|
|
18
|
-
|
|
18
|
+
"LocalStorage"
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
public class func requiresMainQueueSetup() -> Bool {
|
|
22
|
-
|
|
22
|
+
true
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
/// prefered thread on which to run this native module
|
|
26
26
|
@objc public var methodQueue: DispatchQueue {
|
|
27
|
-
|
|
27
|
+
DispatchQueue.main
|
|
28
28
|
}
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
|
|
30
|
+
enum Errors {
|
|
31
31
|
static let errorCode = "LocalErrors"
|
|
32
32
|
static let errorMessageSet = "Local storage value could not be saved"
|
|
33
33
|
static let errorMessageGet = "Local storage value could not be retrieved"
|
|
@@ -46,17 +46,20 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
46
46
|
/// - rejecter: rejecter when something fails
|
|
47
47
|
@objc public func setItem(_ key: String?, value: String?, namespace: String?,
|
|
48
48
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
49
|
-
rejecter: @escaping RCTPromiseRejectBlock)
|
|
49
|
+
rejecter: @escaping RCTPromiseRejectBlock)
|
|
50
|
+
{
|
|
50
51
|
guard let key = key,
|
|
51
52
|
let value = value,
|
|
52
|
-
let storage = FacadeConnector.connector?.storage
|
|
53
|
+
let storage = FacadeConnector.connector?.storage
|
|
54
|
+
else {
|
|
53
55
|
rejecter(Errors.errorCode, Errors.errorMessageSet, nil)
|
|
54
56
|
return
|
|
55
57
|
}
|
|
56
58
|
|
|
57
59
|
if storage.localStorageSetValue(for: key,
|
|
58
60
|
value: value,
|
|
59
|
-
namespace: namespace) == true
|
|
61
|
+
namespace: namespace) == true
|
|
62
|
+
{
|
|
60
63
|
resolver(true)
|
|
61
64
|
} else {
|
|
62
65
|
rejecter(Errors.errorCode, Errors.errorMessageSet, nil)
|
|
@@ -73,9 +76,11 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
73
76
|
@objc public func getItem(_ key: String?,
|
|
74
77
|
namespace: String?,
|
|
75
78
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
76
|
-
rejecter: @escaping RCTPromiseRejectBlock)
|
|
79
|
+
rejecter: @escaping RCTPromiseRejectBlock)
|
|
80
|
+
{
|
|
77
81
|
guard let key = key,
|
|
78
|
-
let storage = FacadeConnector.connector?.storage
|
|
82
|
+
let storage = FacadeConnector.connector?.storage
|
|
83
|
+
else {
|
|
79
84
|
rejecter(Errors.errorCode, Errors.errorMessageGet, nil)
|
|
80
85
|
return
|
|
81
86
|
}
|
|
@@ -94,9 +99,11 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
94
99
|
@objc public func removeItem(_ key: String?,
|
|
95
100
|
namespace: String?,
|
|
96
101
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
97
|
-
rejecter: @escaping RCTPromiseRejectBlock)
|
|
102
|
+
rejecter: @escaping RCTPromiseRejectBlock)
|
|
103
|
+
{
|
|
98
104
|
guard let key = key,
|
|
99
|
-
let storage = FacadeConnector.connector?.storage
|
|
105
|
+
let storage = FacadeConnector.connector?.storage
|
|
106
|
+
else {
|
|
100
107
|
rejecter(Errors.errorCode, Errors.errorMessageRemove, nil)
|
|
101
108
|
return
|
|
102
109
|
}
|
|
@@ -114,7 +121,8 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
114
121
|
/// - rejecter: rejecter when something fails
|
|
115
122
|
@objc public func getAllItems(_ namespace: String?,
|
|
116
123
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
117
|
-
rejecter: @escaping RCTPromiseRejectBlock)
|
|
124
|
+
rejecter: @escaping RCTPromiseRejectBlock)
|
|
125
|
+
{
|
|
118
126
|
guard let storage = FacadeConnector.connector?.storage else {
|
|
119
127
|
rejecter(Errors.errorCode, Errors.errorMessageGet, nil)
|
|
120
128
|
return
|
|
@@ -136,17 +144,20 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
136
144
|
value: String?,
|
|
137
145
|
namespace: String?,
|
|
138
146
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
139
|
-
rejecter: @escaping RCTPromiseRejectBlock)
|
|
147
|
+
rejecter: @escaping RCTPromiseRejectBlock)
|
|
148
|
+
{
|
|
140
149
|
guard let key = key,
|
|
141
150
|
let value = value,
|
|
142
|
-
let storage = FacadeConnector.connector?.storage
|
|
151
|
+
let storage = FacadeConnector.connector?.storage
|
|
152
|
+
else {
|
|
143
153
|
rejecter(Errors.errorCode, Errors.errorMessageSet, nil)
|
|
144
154
|
return
|
|
145
155
|
}
|
|
146
156
|
|
|
147
157
|
if storage.keychainStorageSetValue(for: key,
|
|
148
158
|
value: value,
|
|
149
|
-
namespace: namespace) == true
|
|
159
|
+
namespace: namespace) == true
|
|
160
|
+
{
|
|
150
161
|
resolver(true)
|
|
151
162
|
} else {
|
|
152
163
|
rejecter(Errors.errorCode, Errors.errorMessageSet, nil)
|
|
@@ -163,9 +174,11 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
163
174
|
@objc public func getKeychainItem(_ key: String?,
|
|
164
175
|
namespace: String?,
|
|
165
176
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
166
|
-
rejecter: @escaping RCTPromiseRejectBlock)
|
|
177
|
+
rejecter: @escaping RCTPromiseRejectBlock)
|
|
178
|
+
{
|
|
167
179
|
guard let key = key,
|
|
168
|
-
let storage = FacadeConnector.connector?.storage
|
|
180
|
+
let storage = FacadeConnector.connector?.storage
|
|
181
|
+
else {
|
|
169
182
|
rejecter(Errors.errorCode, Errors.errorMessageGet, nil)
|
|
170
183
|
return
|
|
171
184
|
}
|
|
@@ -184,9 +197,11 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
184
197
|
@objc public func removeKeychainItem(_ key: String?,
|
|
185
198
|
namespace: String?,
|
|
186
199
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
187
|
-
rejecter: @escaping RCTPromiseRejectBlock)
|
|
200
|
+
rejecter: @escaping RCTPromiseRejectBlock)
|
|
201
|
+
{
|
|
188
202
|
guard let key = key,
|
|
189
|
-
let storage = FacadeConnector.connector?.storage
|
|
203
|
+
let storage = FacadeConnector.connector?.storage
|
|
204
|
+
else {
|
|
190
205
|
rejecter(Errors.errorCode, Errors.errorMessageRemove, nil)
|
|
191
206
|
return
|
|
192
207
|
}
|
|
@@ -15,19 +15,19 @@ class SessionStorageBridge: NSObject, RCTBridgeModule {
|
|
|
15
15
|
var bridge: RCTBridge!
|
|
16
16
|
|
|
17
17
|
static func moduleName() -> String! {
|
|
18
|
-
|
|
18
|
+
"SessionStorage"
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
public class func requiresMainQueueSetup() -> Bool {
|
|
22
|
-
|
|
22
|
+
true
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
/// prefered thread on which to run this native module
|
|
26
26
|
@objc public var methodQueue: DispatchQueue {
|
|
27
|
-
|
|
27
|
+
DispatchQueue.main
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
enum Errors {
|
|
31
31
|
static let errorCode = "SessionErrors"
|
|
32
32
|
static let errorMessageSet = "Session storage value could not be saved"
|
|
33
33
|
static let errorMessageGet = "Session storage value could not be retrieved"
|
|
@@ -46,17 +46,20 @@ class SessionStorageBridge: NSObject, RCTBridgeModule {
|
|
|
46
46
|
/// - rejecter: rejecter when something fails
|
|
47
47
|
@objc public func setItem(_ key: String?, value: String?, namespace: String?,
|
|
48
48
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
49
|
-
rejecter: @escaping RCTPromiseRejectBlock)
|
|
49
|
+
rejecter: @escaping RCTPromiseRejectBlock)
|
|
50
|
+
{
|
|
50
51
|
guard let key = key,
|
|
51
52
|
let value = value,
|
|
52
|
-
let storage = FacadeConnector.connector?.storage
|
|
53
|
+
let storage = FacadeConnector.connector?.storage
|
|
54
|
+
else {
|
|
53
55
|
rejecter(Errors.errorCode, Errors.errorMessageSet, nil)
|
|
54
56
|
return
|
|
55
57
|
}
|
|
56
58
|
|
|
57
59
|
if storage.sessionStorageSetValue(for: key,
|
|
58
60
|
value: value,
|
|
59
|
-
namespace: namespace) == true
|
|
61
|
+
namespace: namespace) == true
|
|
62
|
+
{
|
|
60
63
|
resolver(true)
|
|
61
64
|
} else {
|
|
62
65
|
rejecter(Errors.errorCode, Errors.errorMessageSet, nil)
|
|
@@ -72,9 +75,11 @@ class SessionStorageBridge: NSObject, RCTBridgeModule {
|
|
|
72
75
|
/// - rejecter: rejecter when something fails
|
|
73
76
|
@objc public func getItem(_ key: String?, namespace: String?,
|
|
74
77
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
75
|
-
rejecter: @escaping RCTPromiseRejectBlock)
|
|
78
|
+
rejecter: @escaping RCTPromiseRejectBlock)
|
|
79
|
+
{
|
|
76
80
|
guard let key = key,
|
|
77
|
-
let storage = FacadeConnector.connector?.storage
|
|
81
|
+
let storage = FacadeConnector.connector?.storage
|
|
82
|
+
else {
|
|
78
83
|
rejecter(Errors.errorCode, Errors.errorMessageGet, nil)
|
|
79
84
|
return
|
|
80
85
|
}
|
|
@@ -94,9 +99,11 @@ class SessionStorageBridge: NSObject, RCTBridgeModule {
|
|
|
94
99
|
@objc public func removeItem(_ key: String?,
|
|
95
100
|
namespace: String?,
|
|
96
101
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
97
|
-
rejecter: @escaping RCTPromiseRejectBlock)
|
|
102
|
+
rejecter: @escaping RCTPromiseRejectBlock)
|
|
103
|
+
{
|
|
98
104
|
guard let key = key,
|
|
99
|
-
let storage = FacadeConnector.connector?.storage
|
|
105
|
+
let storage = FacadeConnector.connector?.storage
|
|
106
|
+
else {
|
|
100
107
|
rejecter(Errors.errorCode, Errors.errorMessageRemove, nil)
|
|
101
108
|
return
|
|
102
109
|
}
|
|
@@ -114,7 +121,8 @@ class SessionStorageBridge: NSObject, RCTBridgeModule {
|
|
|
114
121
|
/// - rejecter: rejecter when something fails
|
|
115
122
|
@objc public func getAllItems(_ namespace: String?,
|
|
116
123
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
117
|
-
rejecter: @escaping RCTPromiseRejectBlock)
|
|
124
|
+
rejecter: @escaping RCTPromiseRejectBlock)
|
|
125
|
+
{
|
|
118
126
|
guard let storage = FacadeConnector.connector?.storage else {
|
|
119
127
|
rejecter(Errors.errorCode, Errors.errorMessageGet, nil)
|
|
120
128
|
return
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
import Foundation
|
|
9
9
|
|
|
10
|
-
public enum RTLLocales:String, CaseIterable {
|
|
10
|
+
public enum RTLLocales: String, CaseIterable {
|
|
11
11
|
case ARABIC = "ar"
|
|
12
12
|
case ARAMAIC = "arc"
|
|
13
13
|
case DIVEHI = "dv"
|
|
@@ -20,12 +20,12 @@ public enum RTLLocales:String, CaseIterable {
|
|
|
20
20
|
case PASHTO = "ps"
|
|
21
21
|
case URDU = "ur"
|
|
22
22
|
case YIDDISH = "yi"
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
private static func allStringValues() -> [String] {
|
|
25
|
-
|
|
25
|
+
RTLLocales.allCases.map(\.rawValue)
|
|
26
26
|
}
|
|
27
|
-
|
|
27
|
+
|
|
28
28
|
public static func includes(locale: String) -> Bool {
|
|
29
|
-
|
|
29
|
+
allStringValues().contains(locale)
|
|
30
30
|
}
|
|
31
31
|
}
|
|
@@ -11,9 +11,7 @@ import XrayLogger
|
|
|
11
11
|
import ZappCore
|
|
12
12
|
|
|
13
13
|
public struct QuickBrickViewControllerLogs: XrayLoggerTemplateProtocol {
|
|
14
|
-
|
|
15
14
|
public static var subsystem: String = "\(kNativeSubsystemPath)/quick_brick_view_controler"
|
|
16
15
|
|
|
17
16
|
public static var forceOrientation = LogTemplate(message: "Force orientation")
|
|
18
|
-
|
|
19
17
|
}
|
|
@@ -11,7 +11,6 @@ import XrayLogger
|
|
|
11
11
|
import ZappCore
|
|
12
12
|
|
|
13
13
|
public struct ReactNativeManagerLogs: XrayLoggerTemplateProtocol {
|
|
14
|
-
|
|
15
14
|
public static var subsystem: String = "\(kNativeSubsystemPath)/react_native_manager"
|
|
16
15
|
|
|
17
16
|
public static var mountingReactApp = LogTemplate(message: "Mounting React App")
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applicaster/quick-brick-native-apple",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.16.1",
|
|
4
4
|
"description": "iOS and tvOS native code for QuickBrick applications. This package is used to provide native logic for QuickBrick",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "echo \"Error: no test specified\" && exit 1"
|