Major improvements to build process, package optimization, and test infrastructure: ## Package Size Optimization (3.4MB → 2.2MB) - Remove source maps from npm package (reduce size by 35%) - Update package.json files field to exclude *.js.map and *.d.ts.map - Enhanced .npmignore for better exclusion patterns - Preserve all browser compatibility and universal shims ## Test Infrastructure Fixes - Increase test timeouts to 120s for TensorFlow operations - Improve memory management with garbage collection hooks - Add proper cleanup between tests to prevent file accumulation - Configure single-fork test execution to reduce memory usage - Fix test parameter issues in intelligent verb scoring tests ## Bug Fixes - Fix lock directory creation in FileSystemStorage - Remove deprecated node-fetch import from api-integration tests - Fix addVerb() and db.add() parameter usage throughout test suite - Ensure proper vector dimensions (384) in all test vectors - Add directory existence checks before lock file operations ## Build & Development - Update vitest configuration for better concurrency and reliability - Add comprehensive test cleanup in setup.ts - Preserve all browser JavaScript functionality and universal compatibility layer The package now meets size requirements while maintaining full functionality for both browser and Node.js environments.
90 lines
2.4 KiB
TypeScript
90 lines
2.4 KiB
TypeScript
/**
|
|
* Simple test setup for Brainy library
|
|
* No direct TensorFlow references - patches are handled internally by Brainy
|
|
*/
|
|
|
|
import { beforeEach, afterEach, afterAll } from 'vitest'
|
|
import { existsSync, rmSync } from 'fs'
|
|
import { join } from 'path'
|
|
|
|
// Define the test utilities type for reuse
|
|
type TestUtilsType = {
|
|
createTestVector: (dimensions: number) => number[]
|
|
timeout: number
|
|
}
|
|
|
|
// Extend global type definitions for both global and globalThis
|
|
declare global {
|
|
let testUtils: TestUtilsType | undefined
|
|
let __ENV__: any
|
|
}
|
|
|
|
// Explicitly declare globalThis interface to ensure TypeScript recognizes these properties
|
|
declare global {
|
|
interface globalThis {
|
|
testUtils?: TestUtilsType | undefined
|
|
__ENV__?: any
|
|
}
|
|
}
|
|
|
|
// Clean up between tests
|
|
beforeEach(() => {
|
|
// Clear any global state that might interfere with tests
|
|
if (typeof globalThis !== 'undefined' && globalThis.__ENV__) {
|
|
delete globalThis.__ENV__
|
|
}
|
|
if (typeof global !== 'undefined' && global.__ENV__) {
|
|
delete global.__ENV__
|
|
}
|
|
|
|
// Clean up test data directory to prevent file accumulation
|
|
const testDataDir = join(process.cwd(), 'brainy-data')
|
|
if (existsSync(testDataDir)) {
|
|
try {
|
|
rmSync(testDataDir, { recursive: true, force: true })
|
|
} catch (error) {
|
|
// Ignore errors during cleanup
|
|
}
|
|
}
|
|
})
|
|
|
|
// Clean up after each test
|
|
afterEach(() => {
|
|
// Force garbage collection if available (requires --expose-gc flag)
|
|
if (global.gc) {
|
|
global.gc()
|
|
}
|
|
})
|
|
|
|
// Final cleanup after all tests
|
|
afterAll(() => {
|
|
// Clean up test data directory
|
|
const testDataDir = join(process.cwd(), 'brainy-data')
|
|
if (existsSync(testDataDir)) {
|
|
try {
|
|
rmSync(testDataDir, { recursive: true, force: true })
|
|
} catch (error) {
|
|
// Ignore errors during cleanup
|
|
}
|
|
}
|
|
})
|
|
|
|
// Add simple test utilities to both global and globalThis for compatibility
|
|
const testUtilsObject = {
|
|
// Create a simple test vector with predictable values
|
|
createTestVector: (dimensions: number): number[] => {
|
|
return Array.from({ length: dimensions }, (_, i) => (i + 1) / dimensions)
|
|
},
|
|
|
|
// Standard timeout for async operations
|
|
timeout: 30000
|
|
}
|
|
|
|
global.testUtils = testUtilsObject
|
|
globalThis.testUtils = testUtilsObject
|
|
|
|
// Set a clear test environment flag for embedding system
|
|
globalThis.__BRAINY_TEST_ENV__ = true
|
|
if (typeof global !== 'undefined') {
|
|
(global as any).__BRAINY_TEST_ENV__ = true
|
|
}
|