- Added `cli-package/brainy-wrapper.js` to patch global `TextEncoder` and `TextDecoder` for Node.js environments, ensuring compatibility with TensorFlow.js. - Implemented unified text encoding utilities in `cli-package/src/utils/textEncoding.ts` for cross-environment consistency. - Enhanced `src/worker.js` and introduced `src/worker.ts` to improve worker execution with better function serialization and error handling. - Updated `package.json`: - Modified the `build` script to include a patch for `TextEncoder`. - Added `test-all` script for multi-environment testing. - Introduced the Puppeteer dependency for browser testing. - Created a favicon generation script `scripts/create-favicon.js` using a base64-encoded icon. - Added `scripts/test-all-environments.js` to run automated tests across Node.js, browser, and CLI environments. - Enhanced `src/utils/workerUtils.ts` to support improved fallback mechanisms and robust worker pooling. This update improves the project's compatibility across environments, refines worker functionalities, and adds comprehensive testing support for reliability.
101 lines
3.2 KiB
JavaScript
Executable file
101 lines
3.2 KiB
JavaScript
Executable file
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Simplified TextEncoder Patch
|
|
*
|
|
* This script patches the compiled unified.js file to fix the TextEncoder issue in Node.js
|
|
* by replacing references to this.util.TextEncoder with direct TextEncoder usage.
|
|
*/
|
|
|
|
import fs from 'fs'
|
|
import path from 'path'
|
|
import { fileURLToPath } from 'url'
|
|
|
|
// Get the directory of the current module
|
|
const __filename = fileURLToPath(import.meta.url)
|
|
const __dirname = path.dirname(__filename)
|
|
|
|
// Path to the compiled unified.js file
|
|
const unifiedJsPath = path.join(__dirname, '..', 'dist', 'unified.js')
|
|
|
|
// Read the file
|
|
console.log(`Reading ${unifiedJsPath}...`)
|
|
let content = fs.readFileSync(unifiedJsPath, 'utf8')
|
|
|
|
// Simple replacement: replace all instances of new this.util.TextEncoder() with new TextEncoder()
|
|
const pattern = /new\s+this\.util\.TextEncoder\(\)/g
|
|
const replacement = 'new TextEncoder()'
|
|
|
|
// Apply the patch
|
|
const patchedContent = content.replace(pattern, replacement)
|
|
|
|
// Check if the patch was applied
|
|
if (patchedContent === content) {
|
|
console.warn(
|
|
'No instances of "new this.util.TextEncoder()" found in the file.'
|
|
)
|
|
} else {
|
|
// Write the patched file
|
|
console.log('Writing patched file...')
|
|
fs.writeFileSync(unifiedJsPath, patchedContent, 'utf8')
|
|
console.log('Patch applied successfully!')
|
|
}
|
|
|
|
// Also patch the minified version if it exists
|
|
const minifiedJsPath = path.join(__dirname, '..', 'dist', 'unified.min.js')
|
|
if (fs.existsSync(minifiedJsPath)) {
|
|
console.log(`Reading ${minifiedJsPath}...`)
|
|
const minContent = fs.readFileSync(minifiedJsPath, 'utf8')
|
|
|
|
// Apply the same replacement to the minified file
|
|
const patchedMinContent = minContent.replace(pattern, replacement)
|
|
|
|
// Check if the patch was applied
|
|
if (patchedMinContent === minContent) {
|
|
console.warn(
|
|
'No instances of "new this.util.TextEncoder()" found in the minified file.'
|
|
)
|
|
} else {
|
|
// Write the patched file
|
|
console.log('Writing patched minified file...')
|
|
fs.writeFileSync(minifiedJsPath, patchedMinContent, 'utf8')
|
|
console.log('Minified file patched successfully!')
|
|
}
|
|
}
|
|
|
|
// Also patch TextDecoder
|
|
console.log('Patching TextDecoder references...')
|
|
content = fs.readFileSync(unifiedJsPath, 'utf8')
|
|
const decoderPattern = /new\s+this\.util\.TextDecoder\(\)/g
|
|
const decoderReplacement = 'new TextDecoder()'
|
|
const patchedDecoderContent = content.replace(
|
|
decoderPattern,
|
|
decoderReplacement
|
|
)
|
|
|
|
if (patchedDecoderContent === content) {
|
|
console.warn(
|
|
'No instances of "new this.util.TextDecoder()" found in the file.'
|
|
)
|
|
} else {
|
|
fs.writeFileSync(unifiedJsPath, patchedDecoderContent, 'utf8')
|
|
console.log('TextDecoder patch applied successfully!')
|
|
}
|
|
|
|
// Patch the minified file for TextDecoder as well
|
|
if (fs.existsSync(minifiedJsPath)) {
|
|
const minContent = fs.readFileSync(minifiedJsPath, 'utf8')
|
|
const patchedMinDecoderContent = minContent.replace(
|
|
decoderPattern,
|
|
decoderReplacement
|
|
)
|
|
|
|
if (patchedMinDecoderContent === minContent) {
|
|
console.warn(
|
|
'No instances of "new this.util.TextDecoder()" found in the minified file.'
|
|
)
|
|
} else {
|
|
fs.writeFileSync(minifiedJsPath, patchedMinDecoderContent, 'utf8')
|
|
console.log('TextDecoder patch applied to minified file successfully!')
|
|
}
|
|
}
|