@lenml/tokenizers
Version:
a lightweight no-dependency fork of transformers.js (only tokenizers)
37 lines (35 loc) • 1.17 kB
JavaScript
/**
* A base class for creating callable objects.
* See [here](https://stackoverflow.com/q/76073890) for more information.
*
* @type {new () => {(...args: any[]): any, _call(...args: any[]): any}}
*/
export const Callable = /** @type {any} */ (
class {
/**
* Creates a new instance of the Callable class.
*/
constructor() {
/**
* Creates a closure that delegates to a private method '_call' with the given arguments.
* @type {any}
* @param {...any} args Zero or more arguments to pass to the '_call' method.
* @returns {*} The result of calling the '_call' method.
*/
let closure = function (...args) {
return closure._call(...args);
};
return Object.setPrototypeOf(closure, new.target.prototype);
}
/**
* This method should be implemented in subclasses to provide the
* functionality of the callable object.
*
* @param {any[]} args
* @throws {Error} If the subclass does not implement the `_call` method.
*/
_call(...args) {
throw Error("Must implement _call method in subclass");
}
}
);