/** * Unified entry point for Brainy * This file exports everything from index.ts * Environment detection is handled here and made available to all components */ // CRITICAL: The TensorFlow.js environment patch is now centralized in setup.ts // We import setup.ts below which applies the necessary patches // CRITICAL: Import setup.js first to ensure TensorFlow.js environment patching // This MUST be the first import to prevent race conditions with TensorFlow.js initialization // Moving or removing this import will cause errors like "TextEncoder is not a constructor" // when the package is used in Node.js environments // // The setup.js file applies a patch that ensures TextEncoder/TextDecoder are properly // available to TensorFlow.js before it initializes its platform detection import './setup.js' // Import environment detection functions import { isBrowser, isNode, isWebWorker, isThreadingAvailable, isThreadingAvailableAsync, areWorkerThreadsAvailable } from './utils/environment.js' // Export environment information with lazy evaluation export const environment = { get isBrowser() { return isBrowser() }, get isNode() { return isNode() }, get isServerless() { return !isBrowser() && !isNode() }, isWebWorker: function() { return isWebWorker() }, get isThreadingAvailable() { return isThreadingAvailable() }, isThreadingAvailableAsync: function() { return isThreadingAvailableAsync() }, areWorkerThreadsAvailable: function() { return areWorkerThreadsAvailable() } } // Make environment information available globally if (typeof globalThis !== 'undefined') { ;(globalThis as any).__ENV__ = environment } // Log the detected environment console.log( `Brainy running in ${ environment.isBrowser ? 'browser' : environment.isNode ? 'Node.js' : 'serverless/unknown' } environment` ) // Re-export everything from index.ts export * from './index.js' // Export the TensorFlow patch function for testing and manual use export { applyTensorFlowPatch } from './utils/textEncoding.js'