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.
Files changed (167) hide show
  1. package/babel.native.config.cjs +8 -0
  2. package/bin/catalyst.js +49 -105
  3. package/changelog.md +8 -0
  4. package/dist/caching.js +1 -1
  5. package/dist/globals.d.ts +7 -0
  6. package/dist/index.jsx +8 -0
  7. package/dist/logger.js +74 -3
  8. package/dist/native/androidProject/app/build.gradle.kts +45 -4
  9. package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/NativeBridge.kt +86 -0
  10. package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/utils/BridgeUtils.kt +8 -0
  11. package/dist/native/androidProject/app/src/main/java/io/yourname/androidproject/utils/FrameworkServerUtils.kt +173 -13
  12. package/dist/native/androidProject/settings.gradle.kts +10 -0
  13. package/dist/native/androidSetup.js +300 -8
  14. package/dist/native/bridge/WebBridge.js +481 -59
  15. package/dist/native/bridge/constants/NativeInterfaces.js +304 -45
  16. package/dist/native/bridge/errors.js +250 -26
  17. package/dist/native/bridge/hooks/index.js +132 -1
  18. package/dist/native/bridge/hooks/useAI.js +94 -0
  19. package/dist/native/bridge/hooks/useCamera.js +347 -9
  20. package/dist/native/bridge/hooks/useDataProtection.js +200 -2
  21. package/dist/native/bridge/hooks/useDeviceInfo.js +71 -2
  22. package/dist/native/bridge/hooks/useFilePicker.js +429 -2
  23. package/dist/native/bridge/hooks/useGoogleSignIn.js +81 -1
  24. package/dist/native/bridge/hooks/useHapticFeedback.js +196 -1
  25. package/dist/native/bridge/hooks/useIntent.js +95 -1
  26. package/dist/native/bridge/hooks/useNativeTransition.js +202 -27
  27. package/dist/native/bridge/hooks/useNetworkStatus.js +84 -3
  28. package/dist/native/bridge/hooks/useNotification.js +318 -2
  29. package/dist/native/bridge/hooks/useSafeArea.js +84 -2
  30. package/dist/native/bridge/hooks/useVideoStream.js +434 -6
  31. package/dist/native/bridge/hooks/utils.js +27 -1
  32. package/dist/native/bridge/hooks.js +16 -1
  33. package/dist/native/bridge/perf/collectors/ApiCollector.js +66 -3
  34. package/dist/native/bridge/perf/collectors/CacheCollector.js +186 -11
  35. package/dist/native/bridge/perf/collectors/HookCollector.js +141 -19
  36. package/dist/native/bridge/perf/collectors/InsightsCollector.js +481 -23
  37. package/dist/native/bridge/perf/collectors/InteractionCollector.js +245 -10
  38. package/dist/native/bridge/perf/collectors/KeyboardCollector.js +107 -8
  39. package/dist/native/bridge/perf/collectors/NavigationCollector.js +273 -32
  40. package/dist/native/bridge/perf/collectors/NetworkTimingCollector.js +178 -2
  41. package/dist/native/bridge/perf/collectors/RenderCollector.js +258 -14
  42. package/dist/native/bridge/perf/collectors/ScrollCollector.js +95 -9
  43. package/dist/native/bridge/perf/collectors/ThreadCollector.js +90 -6
  44. package/dist/native/bridge/perf/core/constants.js +103 -20
  45. package/dist/native/bridge/perf/core/measure.js +179 -30
  46. package/dist/native/bridge/perf/core/session.js +89 -23
  47. package/dist/native/bridge/perf/core/store.js +554 -1
  48. package/dist/native/bridge/perf/core/summary.js +174 -1
  49. package/dist/native/bridge/perf/core/traceExport.js +240 -1
  50. package/dist/native/bridge/perf/core/waterfalls.js +146 -1
  51. package/dist/native/bridge/perf/index.js +359 -38
  52. package/dist/native/bridge/safeArea.js +53 -5
  53. package/dist/native/bridge/standardizedHooks.js +595 -82
  54. package/dist/native/bridge/useBaseHook.js +274 -38
  55. package/dist/native/bridge/utils/CameraUtils.js +201 -56
  56. package/dist/native/bridge/utils/FileObjectConverter.js +129 -18
  57. package/dist/native/bridge/utils/NativeBridge.js +425 -141
  58. package/dist/native/buildAndroid/assets.js +510 -13
  59. package/dist/native/buildAndroid/build.js +296 -19
  60. package/dist/native/buildAndroid/config.js +87 -1
  61. package/dist/native/buildAndroid/index.js +406 -1
  62. package/dist/native/buildAppAndroid.js +34 -2
  63. package/dist/native/buildAppIos.js +62 -2
  64. package/dist/native/buildIos/assets.js +609 -8
  65. package/dist/native/buildIos/build.js +639 -20
  66. package/dist/native/buildIos/config.js +294 -12
  67. package/dist/native/buildIos/index.js +343 -6
  68. package/dist/native/buildIos/plugins.js +343 -16
  69. package/dist/native/internal-plugins/device-info-plugin/android/DeviceInfoPlugin.kt +43 -0
  70. package/dist/native/internal-plugins/device-info-plugin/ios/DeviceInfoPlugin.swift +28 -0
  71. package/dist/native/internal-plugins/device-info-plugin/manifest.json +19 -0
  72. package/dist/native/internalPluginUtils.js +232 -7
  73. package/dist/native/package.json +3 -0
  74. package/dist/native/plugin-bridge/PluginBridge.js +227 -1
  75. package/dist/native/pluginComposerAndroid.js +407 -23
  76. package/dist/native/pluginComposerIos.js +435 -11
  77. package/dist/native/renameAndroidProject.js +1094 -88
  78. package/dist/native/setupEmulatorIos.js +289 -22
  79. package/dist/native/setupServer.js +160 -19
  80. package/dist/native/terminalProgress.js +199 -11
  81. package/dist/native/utils.js +193 -15
  82. package/dist/offline/catalyst-sw.js +145 -1
  83. package/dist/offline/registerServiceWorker.js +33 -1
  84. package/dist/otel.js +375 -46
  85. package/dist/router/ClientRouter.js +14 -2
  86. package/dist/router/ServerRouter.js +9 -1
  87. package/dist/router.js +1 -1
  88. package/dist/scripts/build.js +112 -3
  89. package/dist/scripts/checkVersion.js +3 -1
  90. package/dist/scripts/cleanCache.js +30 -1
  91. package/dist/scripts/generateOfflineManifest.js +116 -1
  92. package/dist/scripts/loadEnvironmentVariables.js +32 -6
  93. package/dist/scripts/plugins.js +309 -1
  94. package/dist/scripts/preServerInit.js +13 -0
  95. package/dist/scripts/scriptUtils.js +54 -3
  96. package/dist/scripts/serve.js +51 -4
  97. package/dist/scripts/start.js +47 -10
  98. package/dist/scripts/validator.js +149 -1
  99. package/dist/sentry.cjs +127 -0
  100. package/dist/sentry.js +125 -5
  101. package/dist/server/expressServer.js +296 -5
  102. package/dist/server/manifestCache.js +36 -0
  103. package/dist/server/renderer/ChunkExtractor.js +144 -0
  104. package/dist/server/renderer/document/Body.jsx +59 -0
  105. package/dist/server/renderer/document/FastRefresh.jsx +20 -0
  106. package/dist/server/renderer/document/Head.jsx +60 -0
  107. package/dist/server/renderer/document/index.jsx +2 -0
  108. package/dist/server/renderer/extract.js +149 -31
  109. package/dist/server/renderer/handler.jsx +450 -0
  110. package/dist/server/renderer/index.js +8 -1
  111. package/dist/server/renderer/render.js +47 -0
  112. package/dist/server/utils/botDetectionMiddleware.js +29 -0
  113. package/dist/server/utils/cjsRequire.js +10 -0
  114. package/dist/server/utils/userAgentUtil.js +87 -9
  115. package/dist/server/utils/validator.js +164 -1
  116. package/dist/vite/FastRefresh.jsx +20 -0
  117. package/dist/vite/inject-cache-key-plugin.js +276 -0
  118. package/dist/vite/loadCustomViteConfig.js +22 -0
  119. package/dist/vite/manifest-categorization-plugin.js +455 -0
  120. package/dist/vite/node-loader.mjs +458 -0
  121. package/dist/vite/scssParams.js +21 -0
  122. package/dist/vite/vite.config.client.js +130 -0
  123. package/dist/vite/vite.config.js +498 -0
  124. package/dist/vite/vite.config.server.js +84 -0
  125. package/dist/web-router/components/MetaTag.jsx +34 -0
  126. package/dist/web-router/components/RouterDataProvider.jsx +332 -0
  127. package/dist/web-router/components/Split.jsx +200 -0
  128. package/dist/web-router/components/SplitInview.jsx +106 -0
  129. package/dist/web-router/components/SsrRequestContext.jsx +14 -0
  130. package/dist/web-router/context.jsx +12 -0
  131. package/dist/web-router/hooks.jsx +72 -0
  132. package/dist/web-router/types/components/MetaTag.d.ts +2 -0
  133. package/dist/web-router/types/components/RouterDataProvider.d.ts +95 -0
  134. package/dist/web-router/types/context.d.ts +14 -0
  135. package/dist/web-router/types/hooks.d.ts +1 -0
  136. package/dist/web-router/types/index.d.ts +3 -0
  137. package/dist/web-router/types/utils/metaDataUtils.d.ts +24 -0
  138. package/dist/web-router/utils/metaDataUtils.jsx +119 -0
  139. package/mcp_v2/conversion-tasks.json +35 -17
  140. package/mcp_v2/knowledge-base.json +176 -17
  141. package/mcp_v2/lib/helpers.js +10 -0
  142. package/mcp_v2/mcp.js +40 -8
  143. package/mcp_v2/package.json +1 -0
  144. package/mcp_v2/tools/build.js +161 -37
  145. package/mcp_v2/tools/conversion.js +106 -5
  146. package/mcp_v2/tools/tasks.js +18 -14
  147. package/package.json +35 -68
  148. package/babel.config.js +0 -32
  149. package/dist/index.js +0 -1
  150. package/dist/scripts/devBuild.js +0 -3
  151. package/dist/scripts/devServe.js +0 -3
  152. package/dist/scripts/loadScriptsBeforeServerStarts.js +0 -4
  153. package/dist/scripts/registerAliases.js +0 -6
  154. package/dist/server/renderer/document/Body.js +0 -11
  155. package/dist/server/renderer/document/Head.js +0 -9
  156. package/dist/server/renderer/document/index.js +0 -1
  157. package/dist/server/renderer/handler.js +0 -47
  158. package/dist/server/startServer.js +0 -57
  159. package/dist/webpack/babel-plugins/remove-client.plugin.js +0 -5
  160. package/dist/webpack/babel-plugins/remove-ssr.plugin.js +0 -5
  161. package/dist/webpack/babel.config.client.js +0 -1
  162. package/dist/webpack/babel.config.ssr.js +0 -1
  163. package/dist/webpack/base.babel.js +0 -7
  164. package/dist/webpack/development.client.babel.js +0 -10
  165. package/dist/webpack/production.client.babel.js +0 -4
  166. package/dist/webpack/production.ssr.babel.js +0 -8
  167. package/dist/webpack/scssParams.js +0 -9
@@ -1,39 +1,263 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.translateError=exports.isDevelopment=exports.createStandardError=exports.ERROR_DEFINITIONS=exports.ERROR_CODES=exports.ERROR_CATEGORIES=void 0;/**
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
- */// Error categories for logical grouping
5
- const ERROR_CATEGORIES=exports.ERROR_CATEGORIES={PERMISSION:"PERMISSION",NETWORK:"NETWORK",FILE_SYSTEM:"FILE_SYSTEM",USER_ACTION:"USER_ACTION",VALIDATION:"VALIDATION",SYSTEM:"SYSTEM",UNKNOWN:"UNKNOWN"};// Standardized error codes
6
- const ERROR_CODES=exports.ERROR_CODES={// Permission errors
7
- PERMISSION_DENIED:"PERMISSION_DENIED",PERMISSION_REQUIRED:"PERMISSION_REQUIRED",// Network errors
8
- NETWORK_UNAVAILABLE:"NETWORK_UNAVAILABLE",DOWNLOAD_FAILED:"DOWNLOAD_FAILED",// File system errors
9
- FILE_NOT_FOUND:"FILE_NOT_FOUND",FILE_TOO_LARGE:"FILE_TOO_LARGE",STORAGE_FULL:"STORAGE_FULL",FILE_CORRUPTED:"FILE_CORRUPTED",// User action errors
10
- OPERATION_CANCELLED:"OPERATION_CANCELLED",NO_FILE_SELECTED:"NO_FILE_SELECTED",// Validation errors
11
- INVALID_FILE_TYPE:"INVALID_FILE_TYPE",INVALID_PARAMETERS:"INVALID_PARAMETERS",// System errors
12
- BRIDGE_UNAVAILABLE:"BRIDGE_UNAVAILABLE",FEATURE_UNSUPPORTED:"FEATURE_UNSUPPORTED",INTERNAL_ERROR:"INTERNAL_ERROR",// Camera specific errors
13
- CAMERA_UNAVAILABLE:"CAMERA_UNAVAILABLE",CAMERA_IN_USE:"CAMERA_IN_USE"};// Error definitions with user-friendly messages and recovery actions
14
- const ERROR_DEFINITIONS=exports.ERROR_DEFINITIONS={[ERROR_CODES.PERMISSION_DENIED]:{category:ERROR_CATEGORIES.PERMISSION,defaultMessage:"Permission denied",defaultDetails:"Required permission was not granted by the user",recoverable:true,suggestedAction:"Grant permission in device settings and try again"},[ERROR_CODES.PERMISSION_REQUIRED]:{category:ERROR_CATEGORIES.PERMISSION,defaultMessage:"Permission required",defaultDetails:"This operation requires additional permissions",recoverable:true,suggestedAction:"Grant the required permission to continue"},[ERROR_CODES.NETWORK_UNAVAILABLE]:{category:ERROR_CATEGORIES.NETWORK,defaultMessage:"No internet connection",defaultDetails:"Network connection is required for this operation",recoverable:true,suggestedAction:"Check your internet connection and try again"},[ERROR_CODES.FILE_NOT_FOUND]:{category:ERROR_CATEGORIES.FILE_SYSTEM,defaultMessage:"File not found",defaultDetails:"The requested file could not be located",recoverable:false,suggestedAction:"The file may have been moved or deleted"},[ERROR_CODES.FILE_TOO_LARGE]:{category:ERROR_CATEGORIES.VALIDATION,defaultMessage:"File too large",defaultDetails:"File exceeds the maximum size limit",recoverable:true,suggestedAction:"Choose a smaller file or compress the current file"},[ERROR_CODES.STORAGE_FULL]:{category:ERROR_CATEGORIES.FILE_SYSTEM,defaultMessage:"Storage full",defaultDetails:"Device storage is full and cannot save the file",recoverable:true,suggestedAction:"Free up some storage space and try again"},[ERROR_CODES.OPERATION_CANCELLED]:{category:ERROR_CATEGORIES.USER_ACTION,defaultMessage:"Operation cancelled",defaultDetails:"The operation was cancelled by the user",recoverable:true,suggestedAction:"Try again if you want to complete the operation"},[ERROR_CODES.INVALID_FILE_TYPE]:{category:ERROR_CATEGORIES.VALIDATION,defaultMessage:"Invalid file type",defaultDetails:"The selected file type is not supported",recoverable:true,suggestedAction:"Choose a file with a supported format"},[ERROR_CODES.BRIDGE_UNAVAILABLE]:{category:ERROR_CATEGORIES.SYSTEM,defaultMessage:"Native feature unavailable",defaultDetails:"The native bridge is not available or not initialized",recoverable:false,suggestedAction:"Use web fallback if available"},[ERROR_CODES.FEATURE_UNSUPPORTED]:{category:ERROR_CATEGORIES.SYSTEM,defaultMessage:"Feature not supported",defaultDetails:"This feature is not supported on the current platform",recoverable:false,suggestedAction:"Try using an alternative method or device"},[ERROR_CODES.CAMERA_UNAVAILABLE]:{category:ERROR_CATEGORIES.SYSTEM,defaultMessage:"Camera unavailable",defaultDetails:"Camera hardware is not available or accessible",recoverable:false,suggestedAction:"Check if your device has a camera and try again"},[ERROR_CODES.CAMERA_IN_USE]:{category:ERROR_CATEGORIES.SYSTEM,defaultMessage:"Camera in use",defaultDetails:"Camera is being used by another application",recoverable:true,suggestedAction:"Close other camera apps and try again"},[ERROR_CODES.INTERNAL_ERROR]:{category:ERROR_CATEGORIES.UNKNOWN,defaultMessage:"An unexpected error occurred",defaultDetails:"An internal error occurred while processing the request",recoverable:true,suggestedAction:"Try again or contact support if the problem persists"}};/**
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
- */const createStandardError=(code,userMessage=null,nativeError=null,customDetails=null)=>{const errorInfo=ERROR_DEFINITIONS[code]||ERROR_DEFINITIONS[ERROR_CODES.INTERNAL_ERROR];return{code,category:errorInfo.category,message:userMessage||errorInfo.defaultMessage,details:customDetails||errorInfo.defaultDetails,recoverable:errorInfo.recoverable,action:errorInfo.suggestedAction,nativeError:nativeError,timestamp:new Date().toISOString()};};/**
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
- */exports.createStandardError=createStandardError;const translateError=nativeError=>{if(!nativeError){return createStandardError(ERROR_CODES.INTERNAL_ERROR,null,nativeError);}const errorString=nativeError.toString().toLowerCase();if(errorString.includes("disabled")&&errorString.includes("config")){return createStandardError(ERROR_CODES.FEATURE_UNSUPPORTED,nativeError.toString(),nativeError);}// Permission errors
26
- if(errorString.includes("permission")&&errorString.includes("denied")){if(errorString.includes("camera")){return createStandardError(ERROR_CODES.PERMISSION_DENIED,"Camera permission denied",nativeError);}if(errorString.includes("storage")||errorString.includes("external_storage")){return createStandardError(ERROR_CODES.PERMISSION_DENIED,"Storage permission denied",nativeError);}return createStandardError(ERROR_CODES.PERMISSION_DENIED,null,nativeError);}// File system errors
27
- if(errorString.includes("filenotfound")||errorString.includes("file not found")){return createStandardError(ERROR_CODES.FILE_NOT_FOUND,null,nativeError);}if(errorString.includes("storage")&&errorString.includes("full")){return createStandardError(ERROR_CODES.STORAGE_FULL,null,nativeError);}// Network errors
28
- if(errorString.includes("network")||errorString.includes("connection")||errorString.includes("internet")){return createStandardError(ERROR_CODES.NETWORK_UNAVAILABLE,null,nativeError);}// User cancellation
29
- if(errorString.includes("cancel")||errorString.includes("abort")){return createStandardError(ERROR_CODES.OPERATION_CANCELLED,null,nativeError);}// Camera specific errors
30
- if(errorString.includes("camera")){if(errorString.includes("unavailable")||errorString.includes("not available")){return createStandardError(ERROR_CODES.CAMERA_UNAVAILABLE,null,nativeError);}if(errorString.includes("in use")||errorString.includes("busy")){return createStandardError(ERROR_CODES.CAMERA_IN_USE,null,nativeError);}}// Activity/Intent errors (Android)
31
- if(errorString.includes("activitynotfound")){return createStandardError(ERROR_CODES.FEATURE_UNSUPPORTED,"No app available to handle this request",nativeError);}// iOS specific error codes
32
- if(typeof nativeError==="object"&&nativeError.code&&nativeError.domain){// Camera errors (iOS)
33
- if(nativeError.domain==="AVCaptureSessionErrorDomain"){if(nativeError.code===-11814){return createStandardError(ERROR_CODES.PERMISSION_DENIED,"Camera access denied",nativeError);}}// Network errors (iOS)
34
- if(nativeError.domain==="NSURLErrorDomain"){if(nativeError.code===-1009){return createStandardError(ERROR_CODES.NETWORK_UNAVAILABLE,null,nativeError);}}// File system errors (iOS)
35
- if(nativeError.domain==="NSCocoaErrorDomain"){if(nativeError.code===260){return createStandardError(ERROR_CODES.FILE_NOT_FOUND,null,nativeError);}}}// Default to internal error
36
- return createStandardError(ERROR_CODES.INTERNAL_ERROR,null,nativeError);};/**
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
- */exports.translateError=translateError;const isDevelopment=()=>{return typeof process!=="undefined"&&process.env&&process.env.NODE_ENV==="development";};exports.isDevelopment=isDevelopment;
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";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"requestCameraPermission",{enumerable:true,get:function(){return _useCamera.requestCameraPermission;}});Object.defineProperty(exports,"requestHapticFeedback",{enumerable:true,get:function(){return _useHapticFeedback.requestHapticFeedback;}});Object.defineProperty(exports,"requestNotificationPermission",{enumerable:true,get:function(){return _useNotification.requestNotificationPermission;}});Object.defineProperty(exports,"sanitizeFilePickerOptions",{enumerable:true,get:function(){return _useFilePicker.sanitizeFilePickerOptions;}});Object.defineProperty(exports,"useCamera",{enumerable:true,get:function(){return _useCamera.useCamera;}});Object.defineProperty(exports,"useCameraPermission",{enumerable:true,get:function(){return _useCamera.useCameraPermission;}});Object.defineProperty(exports,"useDataProtection",{enumerable:true,get:function(){return _useDataProtection.useDataProtection;}});Object.defineProperty(exports,"useDeviceInfo",{enumerable:true,get:function(){return _useDeviceInfo.useDeviceInfo;}});Object.defineProperty(exports,"useFilePicker",{enumerable:true,get:function(){return _useFilePicker.useFilePicker;}});Object.defineProperty(exports,"useGoogleSignIn",{enumerable:true,get:function(){return _useGoogleSignIn.useGoogleSignIn;}});Object.defineProperty(exports,"useHapticFeedback",{enumerable:true,get:function(){return _useHapticFeedback.useHapticFeedback;}});Object.defineProperty(exports,"useIntent",{enumerable:true,get:function(){return _useIntent.useIntent;}});Object.defineProperty(exports,"useNativeTransition",{enumerable:true,get:function(){return _useNativeTransition.useNativeTransition;}});Object.defineProperty(exports,"useNetworkStatus",{enumerable:true,get:function(){return _useNetworkStatus.useNetworkStatus;}});Object.defineProperty(exports,"useNotification",{enumerable:true,get:function(){return _useNotification.useNotification;}});Object.defineProperty(exports,"useNotificationPermission",{enumerable:true,get:function(){return _useNotification.useNotificationPermission;}});Object.defineProperty(exports,"useSafeArea",{enumerable:true,get:function(){return _useSafeArea.useSafeArea;}});Object.defineProperty(exports,"useVideoStream",{enumerable:true,get:function(){return _useVideoStream.useVideoStream;}});var _useGoogleSignIn=require("./useGoogleSignIn.js");var _useCamera=require("./useCamera.js");var _useIntent=require("./useIntent.js");var _useFilePicker=require("./useFilePicker.js");var _useHapticFeedback=require("./useHapticFeedback.js");var _useNotification=require("./useNotification.js");var _useNetworkStatus=require("./useNetworkStatus.js");var _useDeviceInfo=require("./useDeviceInfo.js");var _useDataProtection=require("./useDataProtection.js");var _useSafeArea=require("./useSafeArea.js");var _useVideoStream=require("./useVideoStream.js");var _useNativeTransition=require("./useNativeTransition.js");
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
+ }