@3fv/guard
Version:
TypeScript guard suite
34 lines • 1.25 kB
JavaScript
export function isNativeClass(value) {
return typeof value === 'function' && value.toString().indexOf('class') === 0;
}
// Character positions
const INDEX_OF_FUNCTION_NAME = 9; // "function X", X is at index 9
const FIRST_UPPERCASE_INDEX_IN_ASCII = 65; // A is at index 65 in ASCII
const LAST_UPPERCASE_INDEX_IN_ASCII = 90; // Z is at index 90 in ASCII
/**
* Is Conventional Class
* Looks for function with capital first letter MyClass
* First letter is the 9th character
* If changed, isClass must also be updated
* @param {any} value
* @returns {boolean}
*/
export function isConventionalClass(value) {
if (typeof value !== 'function')
return false;
const c = value.toString().charCodeAt(INDEX_OF_FUNCTION_NAME);
return c >= FIRST_UPPERCASE_INDEX_IN_ASCII && c <= LAST_UPPERCASE_INDEX_IN_ASCII;
}
export function isClass(value, includeConventional = true) {
return isNativeClass(value) || (includeConventional && isConventionalClass(value));
}
export function createInstanceOfGuard(ctor) {
return (o) => o instanceof ctor;
}
export function instanceOf(ctor) {
return createInstanceOfGuard(ctor);
}
export function createGenericGuard(typeOrTest, tester) {
return tester;
}
//# sourceMappingURL=class.js.map