- Updated Node.js version requirement to `>=24.3.0` in `README.md` and `package-lock.json`. - Upgraded `TypeScript` to version `5.4.5` and synced references. - Updated multiple dependencies, including: - `@aws-sdk/client-s3` to `^3.540.0`. - `uuid` to `^9.0.1`. - Development tools such as `eslint` to `^8.57.0`, `typescript-eslint` plugins to `^7.4.0`, and more. - Refreshed transitive dependencies with up-to-date versions for consistency and performance. This update ensures compatibility with the latest Node.js features, aligns TypeScript references, and keeps the project dependencies up-to-date for improved stability and functionality.
79 lines
2.3 KiB
TypeScript
79 lines
2.3 KiB
TypeScript
/**
|
|
* Utility functions for TensorFlow.js compatibility
|
|
* This module provides utility functions that TensorFlow.js might need
|
|
* and avoids the need to use globalThis.util
|
|
*/
|
|
|
|
// Import the TensorFlowUtilObject interface
|
|
import type {
|
|
TensorFlowUtilObject,
|
|
PlatformNodeObject
|
|
} from '../types/tensorflowTypes.js'
|
|
|
|
// Define a global PlatformNode class for TensorFlow.js compatibility
|
|
// This is needed because TensorFlow.js creates its own PlatformNode instance
|
|
// and we need to ensure it uses the correct TextEncoder/TextDecoder
|
|
if (
|
|
typeof global !== 'undefined' &&
|
|
typeof process !== 'undefined' &&
|
|
process.versions &&
|
|
process.versions.node
|
|
) {
|
|
try {
|
|
// In Node.js v24.3.0+, TextEncoder and TextDecoder are globally available
|
|
// Define the PlatformNode class that TensorFlow.js will use
|
|
class PlatformNode {
|
|
util: any
|
|
textEncoder: any
|
|
textDecoder: any
|
|
|
|
constructor() {
|
|
// Create a util object with the necessary methods
|
|
this.util = {
|
|
isFloat32Array,
|
|
isTypedArray,
|
|
TextEncoder,
|
|
TextDecoder
|
|
}
|
|
|
|
// Initialize TextEncoder/TextDecoder instances
|
|
this.textEncoder = new TextEncoder()
|
|
this.textDecoder = new TextDecoder()
|
|
}
|
|
}
|
|
|
|
// Assign the PlatformNode class to the global object
|
|
;(global as any).PlatformNode = PlatformNode
|
|
|
|
// Also create an instance and assign it to global.platformNode (lowercase p)
|
|
// Some TensorFlow.js code might look for this
|
|
;(global as any).platformNode = new PlatformNode()
|
|
|
|
console.log(
|
|
'Defined global PlatformNode class for TensorFlow.js compatibility'
|
|
)
|
|
} catch (error) {
|
|
console.warn('Failed to define global PlatformNode class:', error)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check if an array is a Float32Array
|
|
* @param arr - The array to check
|
|
* @returns True if the array is a Float32Array
|
|
*/
|
|
export function isFloat32Array(arr: unknown): boolean {
|
|
return !!(
|
|
arr instanceof Float32Array ||
|
|
(arr && Object.prototype.toString.call(arr) === '[object Float32Array]')
|
|
)
|
|
}
|
|
|
|
/**
|
|
* Check if an array is a TypedArray
|
|
* @param arr - The array to check
|
|
* @returns True if the array is a TypedArray
|
|
*/
|
|
export function isTypedArray(arr: unknown): boolean {
|
|
return !!(ArrayBuffer.isView(arr) && !(arr instanceof DataView))
|
|
}
|