catalyst-core 0.2.0-beta.3 → 0.3.0-beta.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/babel.native.config.cjs +8 -0
- package/bin/catalyst.js +49 -105
- package/changelog.md +8 -0
- package/dist/caching.js +1 -1
- package/dist/globals.d.ts +7 -0
- package/dist/index.jsx +8 -0
- package/dist/logger.js +74 -3
- package/dist/native/androidProject/app/build.gradle.kts +45 -4
- package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/NativeBridge.kt +86 -0
- package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/utils/BridgeUtils.kt +8 -0
- package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/utils/FrameworkServerUtils.kt +173 -13
- package/dist/native/androidProject/settings.gradle.kts +10 -0
- package/dist/native/androidSetup.js +300 -8
- package/dist/native/bridge/WebBridge.js +481 -59
- package/dist/native/bridge/constants/NativeInterfaces.js +304 -45
- package/dist/native/bridge/errors.js +250 -26
- package/dist/native/bridge/hooks/index.js +132 -1
- package/dist/native/bridge/hooks/useAI.js +94 -0
- package/dist/native/bridge/hooks/useCamera.js +347 -9
- package/dist/native/bridge/hooks/useDataProtection.js +200 -2
- package/dist/native/bridge/hooks/useDeviceInfo.js +71 -2
- package/dist/native/bridge/hooks/useFilePicker.js +429 -2
- package/dist/native/bridge/hooks/useGoogleSignIn.js +81 -1
- package/dist/native/bridge/hooks/useHapticFeedback.js +196 -1
- package/dist/native/bridge/hooks/useIntent.js +95 -1
- package/dist/native/bridge/hooks/useNativeTransition.js +202 -27
- package/dist/native/bridge/hooks/useNetworkStatus.js +84 -3
- package/dist/native/bridge/hooks/useNotification.js +318 -2
- package/dist/native/bridge/hooks/useSafeArea.js +84 -2
- package/dist/native/bridge/hooks/useVideoStream.js +434 -6
- package/dist/native/bridge/hooks/utils.js +27 -1
- package/dist/native/bridge/hooks.js +16 -1
- package/dist/native/bridge/perf/collectors/ApiCollector.js +66 -3
- package/dist/native/bridge/perf/collectors/CacheCollector.js +186 -11
- package/dist/native/bridge/perf/collectors/HookCollector.js +141 -19
- package/dist/native/bridge/perf/collectors/InsightsCollector.js +481 -23
- package/dist/native/bridge/perf/collectors/InteractionCollector.js +245 -10
- package/dist/native/bridge/perf/collectors/KeyboardCollector.js +107 -8
- package/dist/native/bridge/perf/collectors/NavigationCollector.js +273 -32
- package/dist/native/bridge/perf/collectors/NetworkTimingCollector.js +178 -2
- package/dist/native/bridge/perf/collectors/RenderCollector.js +258 -14
- package/dist/native/bridge/perf/collectors/ScrollCollector.js +95 -9
- package/dist/native/bridge/perf/collectors/ThreadCollector.js +90 -6
- package/dist/native/bridge/perf/core/constants.js +103 -20
- package/dist/native/bridge/perf/core/measure.js +179 -30
- package/dist/native/bridge/perf/core/session.js +89 -23
- package/dist/native/bridge/perf/core/store.js +554 -1
- package/dist/native/bridge/perf/core/summary.js +174 -1
- package/dist/native/bridge/perf/core/traceExport.js +240 -1
- package/dist/native/bridge/perf/core/waterfalls.js +146 -1
- package/dist/native/bridge/perf/index.js +359 -38
- package/dist/native/bridge/safeArea.js +53 -5
- package/dist/native/bridge/standardizedHooks.js +595 -82
- package/dist/native/bridge/useBaseHook.js +274 -38
- package/dist/native/bridge/utils/CameraUtils.js +201 -56
- package/dist/native/bridge/utils/FileObjectConverter.js +129 -18
- package/dist/native/bridge/utils/NativeBridge.js +425 -141
- package/dist/native/buildAndroid/assets.js +510 -13
- package/dist/native/buildAndroid/build.js +296 -19
- package/dist/native/buildAndroid/config.js +87 -1
- package/dist/native/buildAndroid/index.js +406 -1
- package/dist/native/buildAppAndroid.js +34 -2
- package/dist/native/buildAppIos.js +62 -2
- package/dist/native/buildIos/assets.js +609 -8
- package/dist/native/buildIos/build.js +639 -20
- package/dist/native/buildIos/config.js +294 -12
- package/dist/native/buildIos/index.js +343 -6
- package/dist/native/buildIos/plugins.js +343 -16
- package/dist/native/internal-plugins/device-info-plugin/android/DeviceInfoPlugin.kt +43 -0
- package/dist/native/internal-plugins/device-info-plugin/ios/DeviceInfoPlugin.swift +28 -0
- package/dist/native/internal-plugins/device-info-plugin/manifest.json +19 -0
- package/dist/native/internalPluginUtils.js +232 -7
- package/dist/native/package.json +3 -0
- package/dist/native/plugin-bridge/PluginBridge.js +227 -1
- package/dist/native/pluginComposerAndroid.js +407 -23
- package/dist/native/pluginComposerIos.js +435 -11
- package/dist/native/renameAndroidProject.js +1094 -88
- package/dist/native/setupEmulatorIos.js +289 -22
- package/dist/native/setupServer.js +160 -19
- package/dist/native/terminalProgress.js +199 -11
- package/dist/native/utils.js +193 -15
- package/dist/offline/catalyst-sw.js +145 -1
- package/dist/offline/registerServiceWorker.js +33 -1
- package/dist/otel.js +375 -46
- package/dist/router/ClientRouter.js +14 -2
- package/dist/router/ServerRouter.js +9 -1
- package/dist/router.js +1 -1
- package/dist/scripts/build.js +112 -3
- package/dist/scripts/checkVersion.js +3 -1
- package/dist/scripts/cleanCache.js +30 -1
- package/dist/scripts/generateOfflineManifest.js +116 -1
- package/dist/scripts/loadEnvironmentVariables.js +32 -6
- package/dist/scripts/plugins.js +309 -1
- package/dist/scripts/preServerInit.js +13 -0
- package/dist/scripts/scriptUtils.js +54 -3
- package/dist/scripts/serve.js +51 -4
- package/dist/scripts/start.js +47 -10
- package/dist/scripts/validator.js +149 -1
- package/dist/sentry.cjs +127 -0
- package/dist/sentry.js +125 -5
- package/dist/server/expressServer.js +296 -5
- package/dist/server/manifestCache.js +36 -0
- package/dist/server/renderer/ChunkExtractor.js +144 -0
- package/dist/server/renderer/document/Body.jsx +59 -0
- package/dist/server/renderer/document/FastRefresh.jsx +20 -0
- package/dist/server/renderer/document/Head.jsx +60 -0
- package/dist/server/renderer/document/index.jsx +2 -0
- package/dist/server/renderer/extract.js +149 -31
- package/dist/server/renderer/handler.jsx +450 -0
- package/dist/server/renderer/index.js +8 -1
- package/dist/server/renderer/render.js +47 -0
- package/dist/server/utils/botDetectionMiddleware.js +29 -0
- package/dist/server/utils/cjsRequire.js +10 -0
- package/dist/server/utils/userAgentUtil.js +87 -9
- package/dist/server/utils/validator.js +164 -1
- package/dist/vite/FastRefresh.jsx +20 -0
- package/dist/vite/inject-cache-key-plugin.js +276 -0
- package/dist/vite/loadCustomViteConfig.js +22 -0
- package/dist/vite/manifest-categorization-plugin.js +455 -0
- package/dist/vite/node-loader.mjs +458 -0
- package/dist/vite/scssParams.js +21 -0
- package/dist/vite/vite.config.client.js +130 -0
- package/dist/vite/vite.config.js +498 -0
- package/dist/vite/vite.config.server.js +84 -0
- package/dist/web-router/components/MetaTag.jsx +34 -0
- package/dist/web-router/components/RouterDataProvider.jsx +332 -0
- package/dist/web-router/components/Split.jsx +200 -0
- package/dist/web-router/components/SplitInview.jsx +106 -0
- package/dist/web-router/components/SsrRequestContext.jsx +14 -0
- package/dist/web-router/context.jsx +12 -0
- package/dist/web-router/hooks.jsx +72 -0
- package/dist/web-router/types/components/MetaTag.d.ts +2 -0
- package/dist/web-router/types/components/RouterDataProvider.d.ts +95 -0
- package/dist/web-router/types/context.d.ts +14 -0
- package/dist/web-router/types/hooks.d.ts +1 -0
- package/dist/web-router/types/index.d.ts +3 -0
- package/dist/web-router/types/utils/metaDataUtils.d.ts +24 -0
- package/dist/web-router/utils/metaDataUtils.jsx +119 -0
- package/mcp_v2/conversion-tasks.json +35 -17
- package/mcp_v2/knowledge-base.json +176 -17
- package/mcp_v2/lib/helpers.js +10 -0
- package/mcp_v2/mcp.js +40 -8
- package/mcp_v2/package.json +1 -0
- package/mcp_v2/tools/build.js +161 -37
- package/mcp_v2/tools/conversion.js +106 -5
- package/mcp_v2/tools/tasks.js +18 -14
- package/package.json +35 -68
- package/babel.config.js +0 -32
- package/dist/index.js +0 -1
- package/dist/scripts/devBuild.js +0 -3
- package/dist/scripts/devServe.js +0 -3
- package/dist/scripts/loadScriptsBeforeServerStarts.js +0 -4
- package/dist/scripts/registerAliases.js +0 -6
- package/dist/server/renderer/document/Body.js +0 -11
- package/dist/server/renderer/document/Head.js +0 -9
- package/dist/server/renderer/document/index.js +0 -1
- package/dist/server/renderer/handler.js +0 -47
- package/dist/server/startServer.js +0 -57
- package/dist/webpack/babel-plugins/remove-client.plugin.js +0 -5
- package/dist/webpack/babel-plugins/remove-ssr.plugin.js +0 -5
- package/dist/webpack/babel.config.client.js +0 -1
- package/dist/webpack/babel.config.ssr.js +0 -1
- package/dist/webpack/base.babel.js +0 -7
- package/dist/webpack/development.client.babel.js +0 -10
- package/dist/webpack/production.client.babel.js +0 -4
- package/dist/webpack/production.ssr.babel.js +0 -8
- package/dist/webpack/scssParams.js +0 -9
|
@@ -1,39 +1,263 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.translateError = exports.isDevelopment = exports.createStandardError = exports.ERROR_DEFINITIONS = exports.ERROR_CODES = exports.ERROR_CATEGORIES = void 0;
|
|
7
|
+
/**
|
|
2
8
|
* Standardized Error System for Catalyst Framework
|
|
3
9
|
* Translates native errors into web developer-friendly messages
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
// Error categories for logical grouping
|
|
13
|
+
const ERROR_CATEGORIES = exports.ERROR_CATEGORIES = {
|
|
14
|
+
PERMISSION: "PERMISSION",
|
|
15
|
+
NETWORK: "NETWORK",
|
|
16
|
+
FILE_SYSTEM: "FILE_SYSTEM",
|
|
17
|
+
USER_ACTION: "USER_ACTION",
|
|
18
|
+
VALIDATION: "VALIDATION",
|
|
19
|
+
SYSTEM: "SYSTEM",
|
|
20
|
+
UNKNOWN: "UNKNOWN"
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
// Standardized error codes
|
|
24
|
+
const ERROR_CODES = exports.ERROR_CODES = {
|
|
25
|
+
// Permission errors
|
|
26
|
+
PERMISSION_DENIED: "PERMISSION_DENIED",
|
|
27
|
+
PERMISSION_REQUIRED: "PERMISSION_REQUIRED",
|
|
28
|
+
// Network errors
|
|
29
|
+
NETWORK_UNAVAILABLE: "NETWORK_UNAVAILABLE",
|
|
30
|
+
DOWNLOAD_FAILED: "DOWNLOAD_FAILED",
|
|
31
|
+
// File system errors
|
|
32
|
+
FILE_NOT_FOUND: "FILE_NOT_FOUND",
|
|
33
|
+
FILE_TOO_LARGE: "FILE_TOO_LARGE",
|
|
34
|
+
STORAGE_FULL: "STORAGE_FULL",
|
|
35
|
+
FILE_CORRUPTED: "FILE_CORRUPTED",
|
|
36
|
+
// User action errors
|
|
37
|
+
OPERATION_CANCELLED: "OPERATION_CANCELLED",
|
|
38
|
+
NO_FILE_SELECTED: "NO_FILE_SELECTED",
|
|
39
|
+
// Validation errors
|
|
40
|
+
INVALID_FILE_TYPE: "INVALID_FILE_TYPE",
|
|
41
|
+
INVALID_PARAMETERS: "INVALID_PARAMETERS",
|
|
42
|
+
// System errors
|
|
43
|
+
BRIDGE_UNAVAILABLE: "BRIDGE_UNAVAILABLE",
|
|
44
|
+
FEATURE_UNSUPPORTED: "FEATURE_UNSUPPORTED",
|
|
45
|
+
INTERNAL_ERROR: "INTERNAL_ERROR",
|
|
46
|
+
// Camera specific errors
|
|
47
|
+
CAMERA_UNAVAILABLE: "CAMERA_UNAVAILABLE",
|
|
48
|
+
CAMERA_IN_USE: "CAMERA_IN_USE"
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
// Error definitions with user-friendly messages and recovery actions
|
|
52
|
+
const ERROR_DEFINITIONS = exports.ERROR_DEFINITIONS = {
|
|
53
|
+
[ERROR_CODES.PERMISSION_DENIED]: {
|
|
54
|
+
category: ERROR_CATEGORIES.PERMISSION,
|
|
55
|
+
defaultMessage: "Permission denied",
|
|
56
|
+
defaultDetails: "Required permission was not granted by the user",
|
|
57
|
+
recoverable: true,
|
|
58
|
+
suggestedAction: "Grant permission in device settings and try again"
|
|
59
|
+
},
|
|
60
|
+
[ERROR_CODES.PERMISSION_REQUIRED]: {
|
|
61
|
+
category: ERROR_CATEGORIES.PERMISSION,
|
|
62
|
+
defaultMessage: "Permission required",
|
|
63
|
+
defaultDetails: "This operation requires additional permissions",
|
|
64
|
+
recoverable: true,
|
|
65
|
+
suggestedAction: "Grant the required permission to continue"
|
|
66
|
+
},
|
|
67
|
+
[ERROR_CODES.NETWORK_UNAVAILABLE]: {
|
|
68
|
+
category: ERROR_CATEGORIES.NETWORK,
|
|
69
|
+
defaultMessage: "No internet connection",
|
|
70
|
+
defaultDetails: "Network connection is required for this operation",
|
|
71
|
+
recoverable: true,
|
|
72
|
+
suggestedAction: "Check your internet connection and try again"
|
|
73
|
+
},
|
|
74
|
+
[ERROR_CODES.FILE_NOT_FOUND]: {
|
|
75
|
+
category: ERROR_CATEGORIES.FILE_SYSTEM,
|
|
76
|
+
defaultMessage: "File not found",
|
|
77
|
+
defaultDetails: "The requested file could not be located",
|
|
78
|
+
recoverable: false,
|
|
79
|
+
suggestedAction: "The file may have been moved or deleted"
|
|
80
|
+
},
|
|
81
|
+
[ERROR_CODES.FILE_TOO_LARGE]: {
|
|
82
|
+
category: ERROR_CATEGORIES.VALIDATION,
|
|
83
|
+
defaultMessage: "File too large",
|
|
84
|
+
defaultDetails: "File exceeds the maximum size limit",
|
|
85
|
+
recoverable: true,
|
|
86
|
+
suggestedAction: "Choose a smaller file or compress the current file"
|
|
87
|
+
},
|
|
88
|
+
[ERROR_CODES.STORAGE_FULL]: {
|
|
89
|
+
category: ERROR_CATEGORIES.FILE_SYSTEM,
|
|
90
|
+
defaultMessage: "Storage full",
|
|
91
|
+
defaultDetails: "Device storage is full and cannot save the file",
|
|
92
|
+
recoverable: true,
|
|
93
|
+
suggestedAction: "Free up some storage space and try again"
|
|
94
|
+
},
|
|
95
|
+
[ERROR_CODES.OPERATION_CANCELLED]: {
|
|
96
|
+
category: ERROR_CATEGORIES.USER_ACTION,
|
|
97
|
+
defaultMessage: "Operation cancelled",
|
|
98
|
+
defaultDetails: "The operation was cancelled by the user",
|
|
99
|
+
recoverable: true,
|
|
100
|
+
suggestedAction: "Try again if you want to complete the operation"
|
|
101
|
+
},
|
|
102
|
+
[ERROR_CODES.INVALID_FILE_TYPE]: {
|
|
103
|
+
category: ERROR_CATEGORIES.VALIDATION,
|
|
104
|
+
defaultMessage: "Invalid file type",
|
|
105
|
+
defaultDetails: "The selected file type is not supported",
|
|
106
|
+
recoverable: true,
|
|
107
|
+
suggestedAction: "Choose a file with a supported format"
|
|
108
|
+
},
|
|
109
|
+
[ERROR_CODES.BRIDGE_UNAVAILABLE]: {
|
|
110
|
+
category: ERROR_CATEGORIES.SYSTEM,
|
|
111
|
+
defaultMessage: "Native feature unavailable",
|
|
112
|
+
defaultDetails: "The native bridge is not available or not initialized",
|
|
113
|
+
recoverable: false,
|
|
114
|
+
suggestedAction: "Use web fallback if available"
|
|
115
|
+
},
|
|
116
|
+
[ERROR_CODES.FEATURE_UNSUPPORTED]: {
|
|
117
|
+
category: ERROR_CATEGORIES.SYSTEM,
|
|
118
|
+
defaultMessage: "Feature not supported",
|
|
119
|
+
defaultDetails: "This feature is not supported on the current platform",
|
|
120
|
+
recoverable: false,
|
|
121
|
+
suggestedAction: "Try using an alternative method or device"
|
|
122
|
+
},
|
|
123
|
+
[ERROR_CODES.CAMERA_UNAVAILABLE]: {
|
|
124
|
+
category: ERROR_CATEGORIES.SYSTEM,
|
|
125
|
+
defaultMessage: "Camera unavailable",
|
|
126
|
+
defaultDetails: "Camera hardware is not available or accessible",
|
|
127
|
+
recoverable: false,
|
|
128
|
+
suggestedAction: "Check if your device has a camera and try again"
|
|
129
|
+
},
|
|
130
|
+
[ERROR_CODES.CAMERA_IN_USE]: {
|
|
131
|
+
category: ERROR_CATEGORIES.SYSTEM,
|
|
132
|
+
defaultMessage: "Camera in use",
|
|
133
|
+
defaultDetails: "Camera is being used by another application",
|
|
134
|
+
recoverable: true,
|
|
135
|
+
suggestedAction: "Close other camera apps and try again"
|
|
136
|
+
},
|
|
137
|
+
[ERROR_CODES.INTERNAL_ERROR]: {
|
|
138
|
+
category: ERROR_CATEGORIES.UNKNOWN,
|
|
139
|
+
defaultMessage: "An unexpected error occurred",
|
|
140
|
+
defaultDetails: "An internal error occurred while processing the request",
|
|
141
|
+
recoverable: true,
|
|
142
|
+
suggestedAction: "Try again or contact support if the problem persists"
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
/**
|
|
15
147
|
* Create a standardized error object
|
|
16
148
|
* @param {string} code - Error code from ERROR_CODES
|
|
17
149
|
* @param {string} userMessage - Custom user-friendly message (optional)
|
|
18
150
|
* @param {any} nativeError - Original native error for debugging
|
|
19
151
|
* @param {string} customDetails - Custom details (optional)
|
|
20
152
|
* @returns {Object} Standardized error object
|
|
21
|
-
*/
|
|
153
|
+
*/
|
|
154
|
+
const createStandardError = (code, userMessage = null, nativeError = null, customDetails = null) => {
|
|
155
|
+
const errorInfo = ERROR_DEFINITIONS[code] || ERROR_DEFINITIONS[ERROR_CODES.INTERNAL_ERROR];
|
|
156
|
+
return {
|
|
157
|
+
code,
|
|
158
|
+
category: errorInfo.category,
|
|
159
|
+
message: userMessage || errorInfo.defaultMessage,
|
|
160
|
+
details: customDetails || errorInfo.defaultDetails,
|
|
161
|
+
recoverable: errorInfo.recoverable,
|
|
162
|
+
action: errorInfo.suggestedAction,
|
|
163
|
+
nativeError: nativeError,
|
|
164
|
+
timestamp: new Date().toISOString()
|
|
165
|
+
};
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
/**
|
|
22
169
|
* Translate native error to standardized error
|
|
23
170
|
* @param {any} nativeError - Native error from Android/iOS
|
|
24
171
|
* @returns {Object} Standardized error object
|
|
25
|
-
*/
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
172
|
+
*/
|
|
173
|
+
exports.createStandardError = createStandardError;
|
|
174
|
+
const translateError = nativeError => {
|
|
175
|
+
if (!nativeError) {
|
|
176
|
+
return createStandardError(ERROR_CODES.INTERNAL_ERROR, null, nativeError);
|
|
177
|
+
}
|
|
178
|
+
const errorString = nativeError.toString().toLowerCase();
|
|
179
|
+
if (errorString.includes("disabled") && errorString.includes("config")) {
|
|
180
|
+
return createStandardError(ERROR_CODES.FEATURE_UNSUPPORTED, nativeError.toString(), nativeError);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Permission errors
|
|
184
|
+
if (errorString.includes("permission") && errorString.includes("denied")) {
|
|
185
|
+
if (errorString.includes("camera")) {
|
|
186
|
+
return createStandardError(ERROR_CODES.PERMISSION_DENIED, "Camera permission denied", nativeError);
|
|
187
|
+
}
|
|
188
|
+
if (errorString.includes("storage") || errorString.includes("external_storage")) {
|
|
189
|
+
return createStandardError(ERROR_CODES.PERMISSION_DENIED, "Storage permission denied", nativeError);
|
|
190
|
+
}
|
|
191
|
+
return createStandardError(ERROR_CODES.PERMISSION_DENIED, null, nativeError);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// File system errors
|
|
195
|
+
if (errorString.includes("filenotfound") || errorString.includes("file not found")) {
|
|
196
|
+
return createStandardError(ERROR_CODES.FILE_NOT_FOUND, null, nativeError);
|
|
197
|
+
}
|
|
198
|
+
if (errorString.includes("storage") && errorString.includes("full")) {
|
|
199
|
+
return createStandardError(ERROR_CODES.STORAGE_FULL, null, nativeError);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Network errors
|
|
203
|
+
if (errorString.includes("network") || errorString.includes("connection") || errorString.includes("internet")) {
|
|
204
|
+
return createStandardError(ERROR_CODES.NETWORK_UNAVAILABLE, null, nativeError);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// User cancellation
|
|
208
|
+
if (errorString.includes("cancel") || errorString.includes("abort")) {
|
|
209
|
+
return createStandardError(ERROR_CODES.OPERATION_CANCELLED, null, nativeError);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// Camera specific errors
|
|
213
|
+
if (errorString.includes("camera")) {
|
|
214
|
+
if (errorString.includes("unavailable") || errorString.includes("not available")) {
|
|
215
|
+
return createStandardError(ERROR_CODES.CAMERA_UNAVAILABLE, null, nativeError);
|
|
216
|
+
}
|
|
217
|
+
if (errorString.includes("in use") || errorString.includes("busy")) {
|
|
218
|
+
return createStandardError(ERROR_CODES.CAMERA_IN_USE, null, nativeError);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Activity/Intent errors (Android)
|
|
223
|
+
if (errorString.includes("activitynotfound")) {
|
|
224
|
+
return createStandardError(ERROR_CODES.FEATURE_UNSUPPORTED, "No app available to handle this request", nativeError);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// iOS specific error codes
|
|
228
|
+
if (typeof nativeError === "object" && nativeError.code && nativeError.domain) {
|
|
229
|
+
// Camera errors (iOS)
|
|
230
|
+
if (nativeError.domain === "AVCaptureSessionErrorDomain") {
|
|
231
|
+
if (nativeError.code === -11814) {
|
|
232
|
+
return createStandardError(ERROR_CODES.PERMISSION_DENIED, "Camera access denied", nativeError);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Network errors (iOS)
|
|
237
|
+
if (nativeError.domain === "NSURLErrorDomain") {
|
|
238
|
+
if (nativeError.code === -1009) {
|
|
239
|
+
return createStandardError(ERROR_CODES.NETWORK_UNAVAILABLE, null, nativeError);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// File system errors (iOS)
|
|
244
|
+
if (nativeError.domain === "NSCocoaErrorDomain") {
|
|
245
|
+
if (nativeError.code === 260) {
|
|
246
|
+
return createStandardError(ERROR_CODES.FILE_NOT_FOUND, null, nativeError);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Default to internal error
|
|
252
|
+
return createStandardError(ERROR_CODES.INTERNAL_ERROR, null, nativeError);
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
/**
|
|
37
256
|
* Check if development mode is enabled
|
|
38
257
|
* @returns {boolean} True if in development mode
|
|
39
|
-
*/
|
|
258
|
+
*/
|
|
259
|
+
exports.translateError = translateError;
|
|
260
|
+
const isDevelopment = () => {
|
|
261
|
+
return typeof process !== "undefined" && process.env && process.env.NODE_ENV === "development";
|
|
262
|
+
};
|
|
263
|
+
exports.isDevelopment = isDevelopment;
|
|
@@ -1 +1,132 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "requestCameraPermission", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _useCamera.requestCameraPermission;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "requestHapticFeedback", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _useHapticFeedback.requestHapticFeedback;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "requestNotificationPermission", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () {
|
|
21
|
+
return _useNotification.requestNotificationPermission;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "sanitizeFilePickerOptions", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () {
|
|
27
|
+
return _useFilePicker.sanitizeFilePickerOptions;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(exports, "useAI", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function () {
|
|
33
|
+
return _useAI.useAI;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(exports, "useCamera", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function () {
|
|
39
|
+
return _useCamera.useCamera;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(exports, "useCameraPermission", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function () {
|
|
45
|
+
return _useCamera.useCameraPermission;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
Object.defineProperty(exports, "useDataProtection", {
|
|
49
|
+
enumerable: true,
|
|
50
|
+
get: function () {
|
|
51
|
+
return _useDataProtection.useDataProtection;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
Object.defineProperty(exports, "useDeviceInfo", {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
get: function () {
|
|
57
|
+
return _useDeviceInfo.useDeviceInfo;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
Object.defineProperty(exports, "useFilePicker", {
|
|
61
|
+
enumerable: true,
|
|
62
|
+
get: function () {
|
|
63
|
+
return _useFilePicker.useFilePicker;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
Object.defineProperty(exports, "useGoogleSignIn", {
|
|
67
|
+
enumerable: true,
|
|
68
|
+
get: function () {
|
|
69
|
+
return _useGoogleSignIn.useGoogleSignIn;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
Object.defineProperty(exports, "useHapticFeedback", {
|
|
73
|
+
enumerable: true,
|
|
74
|
+
get: function () {
|
|
75
|
+
return _useHapticFeedback.useHapticFeedback;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
Object.defineProperty(exports, "useIntent", {
|
|
79
|
+
enumerable: true,
|
|
80
|
+
get: function () {
|
|
81
|
+
return _useIntent.useIntent;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
Object.defineProperty(exports, "useNativeTransition", {
|
|
85
|
+
enumerable: true,
|
|
86
|
+
get: function () {
|
|
87
|
+
return _useNativeTransition.useNativeTransition;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
Object.defineProperty(exports, "useNetworkStatus", {
|
|
91
|
+
enumerable: true,
|
|
92
|
+
get: function () {
|
|
93
|
+
return _useNetworkStatus.useNetworkStatus;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
Object.defineProperty(exports, "useNotification", {
|
|
97
|
+
enumerable: true,
|
|
98
|
+
get: function () {
|
|
99
|
+
return _useNotification.useNotification;
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
Object.defineProperty(exports, "useNotificationPermission", {
|
|
103
|
+
enumerable: true,
|
|
104
|
+
get: function () {
|
|
105
|
+
return _useNotification.useNotificationPermission;
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
Object.defineProperty(exports, "useSafeArea", {
|
|
109
|
+
enumerable: true,
|
|
110
|
+
get: function () {
|
|
111
|
+
return _useSafeArea.useSafeArea;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
Object.defineProperty(exports, "useVideoStream", {
|
|
115
|
+
enumerable: true,
|
|
116
|
+
get: function () {
|
|
117
|
+
return _useVideoStream.useVideoStream;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
var _useAI = require("./useAI.js");
|
|
121
|
+
var _useGoogleSignIn = require("./useGoogleSignIn.js");
|
|
122
|
+
var _useCamera = require("./useCamera.js");
|
|
123
|
+
var _useIntent = require("./useIntent.js");
|
|
124
|
+
var _useFilePicker = require("./useFilePicker.js");
|
|
125
|
+
var _useHapticFeedback = require("./useHapticFeedback.js");
|
|
126
|
+
var _useNotification = require("./useNotification.js");
|
|
127
|
+
var _useNetworkStatus = require("./useNetworkStatus.js");
|
|
128
|
+
var _useDeviceInfo = require("./useDeviceInfo.js");
|
|
129
|
+
var _useDataProtection = require("./useDataProtection.js");
|
|
130
|
+
var _useSafeArea = require("./useSafeArea.js");
|
|
131
|
+
var _useVideoStream = require("./useVideoStream.js");
|
|
132
|
+
var _useNativeTransition = require("./useNativeTransition.js");
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useAI = useAI;
|
|
7
|
+
/* global __CATALYST_PACKAGES__ */
|
|
8
|
+
|
|
9
|
+
function getBrowserConfig() {
|
|
10
|
+
try {
|
|
11
|
+
const raw = process.env.AI_PUBLIC_CONFIG;
|
|
12
|
+
if (!raw) return null;
|
|
13
|
+
const parsed = JSON.parse(raw);
|
|
14
|
+
return parsed?.browser || null;
|
|
15
|
+
} catch (_) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function resolveMode(provider) {
|
|
20
|
+
if (provider === "transformers") return "local";
|
|
21
|
+
if (provider === "native") return "native";
|
|
22
|
+
return "cloud";
|
|
23
|
+
}
|
|
24
|
+
function isNativeAIAvailable() {
|
|
25
|
+
const nb = typeof window !== "undefined" && window.NativeBridge;
|
|
26
|
+
return nb && typeof nb.isAIAvailable === "function" && nb.isAIAvailable();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// __CATALYST_PACKAGES__ is substituted by webpack's DefinePlugin / Vite's `define` in
|
|
30
|
+
// client bundles only. catalyst-core is externalized (nodeExternals) from the SSR
|
|
31
|
+
// bundle, so on the server this file is loaded directly by Node — including via Vite's
|
|
32
|
+
// ssrLoadModule, which executes real ESM with no bundler transform and no `require`
|
|
33
|
+
// shim. useAI() always discards the SSR result anyway (returns emptyHook() when
|
|
34
|
+
// `window` is undefined), so only ever attempt the client-side `require` — a bare
|
|
35
|
+
// `require()` reached during SSR would throw ReferenceError rather than a catchable
|
|
36
|
+
// MODULE_NOT_FOUND, since this package is "type": "module".
|
|
37
|
+
const _pkg = typeof window !== "undefined" && (typeof __CATALYST_PACKAGES__ === "undefined" || __CATALYST_PACKAGES__.ai) ? (() => {
|
|
38
|
+
try {
|
|
39
|
+
return require(/* webpackIgnore: true */"catalyst-ai");
|
|
40
|
+
} catch (_) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
})() : null;
|
|
44
|
+
|
|
45
|
+
// provider: "transformers" → useWebAI (catalyst-ai)
|
|
46
|
+
// "native" → useNativeAI (catalyst-ai, falls back to useCloudAI if bridge unavailable)
|
|
47
|
+
// anything else → useCloudAI (catalyst-ai, default)
|
|
48
|
+
function useAI(options = {}) {
|
|
49
|
+
const {
|
|
50
|
+
provider
|
|
51
|
+
} = options;
|
|
52
|
+
const config = getBrowserConfig();
|
|
53
|
+
const resolvedProvider = provider || config?.provider;
|
|
54
|
+
const mode = resolveMode(resolvedProvider);
|
|
55
|
+
const cloudResult = _pkg ? _pkg.useCloudAI(options) : emptyHook();
|
|
56
|
+
const webResult = _pkg ? _pkg.useWebAI(options) : emptyHook();
|
|
57
|
+
const nativeResult = _pkg ? _pkg.useNativeAI({
|
|
58
|
+
...options,
|
|
59
|
+
enabled: mode === "native"
|
|
60
|
+
}) : emptyHook();
|
|
61
|
+
if (typeof window === "undefined") return emptyHook();
|
|
62
|
+
if (!_pkg) {
|
|
63
|
+
console.error("\n[catalyst-core] useAI requires catalyst-ai.\n" + "Run: npm install catalyst-ai\n");
|
|
64
|
+
return emptyHook();
|
|
65
|
+
}
|
|
66
|
+
if (mode === "local") return webResult;
|
|
67
|
+
if (mode === "native" && isNativeAIAvailable()) return nativeResult;
|
|
68
|
+
return cloudResult;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Returned when catalyst-ai is missing — keeps hook shape stable so callers don't crash
|
|
72
|
+
function emptyHook() {
|
|
73
|
+
return {
|
|
74
|
+
output: "",
|
|
75
|
+
streaming: false,
|
|
76
|
+
loading: false,
|
|
77
|
+
error: null,
|
|
78
|
+
modelReady: false,
|
|
79
|
+
downloadProgress: null,
|
|
80
|
+
nativeDownloadProgress: null,
|
|
81
|
+
nativeLogs: [],
|
|
82
|
+
metrics: null,
|
|
83
|
+
isLocal: false,
|
|
84
|
+
isNative: false,
|
|
85
|
+
isWeb: false,
|
|
86
|
+
generate: () => {},
|
|
87
|
+
cancel: () => {},
|
|
88
|
+
reset: () => {},
|
|
89
|
+
clearError: () => {},
|
|
90
|
+
conversationId: null,
|
|
91
|
+
getSessionMetrics: () => null,
|
|
92
|
+
resetSessionMetrics: () => {}
|
|
93
|
+
};
|
|
94
|
+
}
|