@3fv/guard
Version:
TypeScript guard suite
42 lines • 1.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isNativeClass = isNativeClass;
exports.isConventionalClass = isConventionalClass;
exports.isClass = isClass;
exports.createInstanceOfGuard = createInstanceOfGuard;
exports.instanceOf = instanceOf;
exports.createGenericGuard = createGenericGuard;
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}
*/
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;
}
function isClass(value, includeConventional = true) {
return isNativeClass(value) || (includeConventional && isConventionalClass(value));
}
function createInstanceOfGuard(ctor) {
return (o) => o instanceof ctor;
}
function instanceOf(ctor) {
return createInstanceOfGuard(ctor);
}
function createGenericGuard(typeOrTest, tester) {
return tester;
}
//# sourceMappingURL=class.js.map