61 lines
2 KiB
TypeScript
61 lines
2 KiB
TypeScript
|
|
/**
|
||
|
|
* Unified Text Encoding Utilities for CLI
|
||
|
|
*
|
||
|
|
* This module provides a consistent way to handle text encoding/decoding across all environments
|
||
|
|
* without relying on TextEncoder/TextDecoder polyfills or patches.
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Apply the TensorFlow.js platform patch if needed
|
||
|
|
* This function patches the global object to provide a PlatformNode class
|
||
|
|
* that uses our text encoding utilities instead of relying on TextEncoder/TextDecoder
|
||
|
|
*/
|
||
|
|
export function applyTensorFlowPatch(): void {
|
||
|
|
// Only apply in Node.js environment
|
||
|
|
if (
|
||
|
|
typeof global !== 'undefined' &&
|
||
|
|
typeof process !== 'undefined' &&
|
||
|
|
process.versions &&
|
||
|
|
process.versions.node
|
||
|
|
) {
|
||
|
|
try {
|
||
|
|
// Define a custom PlatformNode class
|
||
|
|
class PlatformNode {
|
||
|
|
util: any
|
||
|
|
textEncoder: any
|
||
|
|
textDecoder: any
|
||
|
|
|
||
|
|
constructor() {
|
||
|
|
// Create a util object with necessary methods and constructors
|
||
|
|
this.util = {
|
||
|
|
isFloat32Array: (arr: any) =>
|
||
|
|
!!(
|
||
|
|
arr instanceof Float32Array ||
|
||
|
|
(arr &&
|
||
|
|
Object.prototype.toString.call(arr) ===
|
||
|
|
'[object Float32Array]')
|
||
|
|
),
|
||
|
|
isTypedArray: (arr: any) =>
|
||
|
|
!!(ArrayBuffer.isView(arr) && !(arr instanceof DataView)),
|
||
|
|
// Use native TextEncoder and TextDecoder
|
||
|
|
TextEncoder: TextEncoder,
|
||
|
|
TextDecoder: TextDecoder
|
||
|
|
}
|
||
|
|
|
||
|
|
// Initialize using the constructors from util
|
||
|
|
this.textEncoder = new this.util.TextEncoder()
|
||
|
|
this.textDecoder = new this.util.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)
|
||
|
|
;(global as any).platformNode = new PlatformNode()
|
||
|
|
} catch (error) {
|
||
|
|
console.warn('Failed to apply TensorFlow.js platform patch:', error)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|