**feat: improve TensorFlow.js compatibility and remove unnecessary patches**
- Removed outdated Node.js v24 compatibility patches for `TextEncoder` and `TextDecoder` in `cli-wrapper.js` and other modules since TensorFlow.js now supports Node.js v24+ natively. - Introduced a utility module `src/utils/tensorflowUtils.ts` for TensorFlow.js compatibility, defining global `PlatformNode` and related utilities. - Enhanced `fileSystemStorage.ts` with improved Node.js module loading mechanisms for better compatibility across environments. - Simplified dependency requirements by reducing the minimum Node.js version to `>=23.0.0`. - Updated `package.json`, `cli-package/package.json`, and `README.md` versions to `0.9.25`. - Harmonized `cli-package` and main package dependencies to ensure version alignment. - Improved global compatibility with TensorFlow.js in mixed Node.js environments. This update modernizes TensorFlow.js integration, reduces maintenance efforts, and aligns compatibility with current Node.js and TensorFlow.js capabilities.
This commit is contained in:
parent
e9f51e1bf3
commit
5edea683c6
20 changed files with 428 additions and 168 deletions
|
|
@ -8,84 +8,123 @@
|
|||
* globally for testing.
|
||||
*/
|
||||
|
||||
import { execSync } from 'child_process';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { execSync } from 'child_process'
|
||||
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);
|
||||
const rootDir = path.join(__dirname, '..');
|
||||
const cliPackageDir = path.join(rootDir, 'cli-package');
|
||||
const __filename = fileURLToPath(import.meta.url)
|
||||
const __dirname = path.dirname(__filename)
|
||||
const rootDir = path.join(__dirname, '..')
|
||||
const cliPackageDir = path.join(rootDir, 'cli-package')
|
||||
|
||||
// Ensure the CLI package directory exists
|
||||
if (!fs.existsSync(cliPackageDir)) {
|
||||
console.error(`Error: CLI package directory not found at ${cliPackageDir}`);
|
||||
process.exit(1);
|
||||
console.error(`Error: CLI package directory not found at ${cliPackageDir}`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
try {
|
||||
// Step 1: Ensure versions are in sync
|
||||
console.log('Ensuring versions are in sync...');
|
||||
execSync('node scripts/generate-version.js', { stdio: 'inherit', cwd: rootDir });
|
||||
console.log('Ensuring versions are in sync...')
|
||||
execSync('node scripts/generate-version.js', {
|
||||
stdio: 'inherit',
|
||||
cwd: rootDir
|
||||
})
|
||||
|
||||
// Step 2: Build the main package
|
||||
console.log('Building main package...');
|
||||
execSync('npm run build', { stdio: 'inherit', cwd: rootDir });
|
||||
console.log('Building main package...')
|
||||
execSync('npm run build', { stdio: 'inherit', cwd: rootDir })
|
||||
|
||||
// Step 3: Create a local tarball of the main package
|
||||
console.log('Creating local tarball of main package...');
|
||||
const mainPackOutput = execSync('npm pack', { cwd: rootDir }).toString().trim();
|
||||
const mainPackageTarball = path.join(rootDir, mainPackOutput);
|
||||
console.log(`Main package tarball created: ${mainPackageTarball}`);
|
||||
console.log('Creating local tarball of main package...')
|
||||
execSync('npm pack', { stdio: 'inherit', cwd: rootDir })
|
||||
|
||||
// Read the main package.json to get the name and version
|
||||
const mainPackageJsonPath = path.join(rootDir, 'package.json')
|
||||
const mainPackageJson = JSON.parse(
|
||||
fs.readFileSync(mainPackageJsonPath, 'utf8')
|
||||
)
|
||||
|
||||
// The tarball name follows a standard format: <package-name>-<version>.tgz
|
||||
const mainPackageName = mainPackageJson.name
|
||||
.replace('@', '')
|
||||
.replace('/', '-')
|
||||
const mainPackageVersion = mainPackageJson.version
|
||||
const mainTarballName = `${mainPackageName}-${mainPackageVersion}.tgz`
|
||||
const mainPackageTarball = path.join(rootDir, mainTarballName)
|
||||
|
||||
// Verify the tarball exists
|
||||
if (!fs.existsSync(mainPackageTarball)) {
|
||||
console.error(
|
||||
`Error: Main package tarball not found at ${mainPackageTarball}`
|
||||
)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
console.log(`Main package tarball created: ${mainPackageTarball}`)
|
||||
|
||||
// Step 4: Build the CLI package
|
||||
console.log('Building CLI package...');
|
||||
execSync('npm run build', { stdio: 'inherit', cwd: cliPackageDir });
|
||||
console.log('Building CLI package...')
|
||||
execSync('npm run build', { stdio: 'inherit', cwd: cliPackageDir })
|
||||
|
||||
// Step 5: Verify the CLI was built successfully
|
||||
const cliPath = path.join(cliPackageDir, 'dist', 'cli.js');
|
||||
const cliPath = path.join(cliPackageDir, 'dist', 'cli.js')
|
||||
if (!fs.existsSync(cliPath)) {
|
||||
console.error(`Error: CLI build failed. File not found at ${cliPath}`);
|
||||
process.exit(1);
|
||||
console.error(`Error: CLI build failed. File not found at ${cliPath}`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
// Step 6: Temporarily update the CLI package.json to use the local main package
|
||||
console.log('Updating CLI package.json to use local main package...');
|
||||
const cliPackageJsonPath = path.join(cliPackageDir, 'package.json');
|
||||
const cliPackageJson = JSON.parse(fs.readFileSync(cliPackageJsonPath, 'utf8'));
|
||||
|
||||
console.log('Updating CLI package.json to use local main package...')
|
||||
const cliPackageJsonPath = path.join(cliPackageDir, 'package.json')
|
||||
const cliPackageJson = JSON.parse(fs.readFileSync(cliPackageJsonPath, 'utf8'))
|
||||
|
||||
// Save the original dependency for restoration later
|
||||
const originalDependency = cliPackageJson.dependencies['@soulcraft/brainy'];
|
||||
|
||||
const originalDependency = cliPackageJson.dependencies['@soulcraft/brainy']
|
||||
|
||||
// Update to use the local tarball
|
||||
cliPackageJson.dependencies['@soulcraft/brainy'] = `file:${mainPackageTarball}`;
|
||||
|
||||
cliPackageJson.dependencies['@soulcraft/brainy'] =
|
||||
`file:${mainPackageTarball}`
|
||||
|
||||
// Write the updated package.json
|
||||
fs.writeFileSync(cliPackageJsonPath, JSON.stringify(cliPackageJson, null, 2));
|
||||
fs.writeFileSync(cliPackageJsonPath, JSON.stringify(cliPackageJson, null, 2))
|
||||
|
||||
// Step 7: Create a local tarball of the CLI package
|
||||
console.log('Creating local tarball of CLI package...');
|
||||
const cliPackOutput = execSync('npm pack', { cwd: cliPackageDir }).toString().trim();
|
||||
const cliPackageTarball = path.join(cliPackageDir, cliPackOutput);
|
||||
console.log(`CLI package tarball created: ${cliPackageTarball}`);
|
||||
console.log('Creating local tarball of CLI package...')
|
||||
execSync('npm pack', { stdio: 'inherit', cwd: cliPackageDir })
|
||||
|
||||
// Step 8: Restore the original dependency in CLI package.json
|
||||
console.log('Restoring original dependency in CLI package.json...');
|
||||
cliPackageJson.dependencies['@soulcraft/brainy'] = originalDependency;
|
||||
fs.writeFileSync(cliPackageJsonPath, JSON.stringify(cliPackageJson, null, 2));
|
||||
// The tarball name follows a standard format: <package-name>-<version>.tgz
|
||||
const cliPackageName = cliPackageJson.name.replace('@', '').replace('/', '-')
|
||||
const cliPackageVersion = cliPackageJson.version
|
||||
const cliTarballName = `${cliPackageName}-${cliPackageVersion}.tgz`
|
||||
const cliPackageTarball = path.join(cliPackageDir, cliTarballName)
|
||||
|
||||
// Step 9: Install the CLI package globally for testing
|
||||
console.log('Installing CLI package globally for testing...');
|
||||
execSync(`npm install -g ${cliPackageTarball}`, { stdio: 'inherit' });
|
||||
// Verify the tarball exists
|
||||
if (!fs.existsSync(cliPackageTarball)) {
|
||||
console.error(
|
||||
`Error: CLI package tarball not found at ${cliPackageTarball}`
|
||||
)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
console.log('\nCLI package installed globally for testing!');
|
||||
console.log('You can now run the CLI using the "brainy" command.');
|
||||
console.log('\nTo uninstall after testing:');
|
||||
console.log('npm uninstall -g @soulcraft/brainy-cli');
|
||||
|
||||
console.log(`CLI package tarball created: ${cliPackageTarball}`)
|
||||
|
||||
// Step 8: Install the CLI package globally for testing
|
||||
console.log('Installing CLI package globally for testing...')
|
||||
execSync(`npm install -g "${cliPackageTarball}"`, { stdio: 'inherit' })
|
||||
|
||||
// Step 9: Restore the original dependency in CLI package.json
|
||||
console.log('Restoring original dependency in CLI package.json...')
|
||||
cliPackageJson.dependencies['@soulcraft/brainy'] = originalDependency
|
||||
fs.writeFileSync(cliPackageJsonPath, JSON.stringify(cliPackageJson, null, 2))
|
||||
|
||||
console.log('\nCLI package installed globally for testing!')
|
||||
console.log('You can now run the CLI using the "brainy" command.')
|
||||
console.log('\nTo uninstall after testing:')
|
||||
console.log('npm uninstall -g @soulcraft/brainy-cli')
|
||||
} catch (error) {
|
||||
console.error('Error:', error.message);
|
||||
process.exit(1);
|
||||
console.error('Error:', error.message)
|
||||
process.exit(1)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue