predictype
Version:
PredicType is a library of pre-built and tested predicates for TypeScript, covering various data types and operations.
32 lines (31 loc) • 1.33 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.objectKeyMembership = objectKeyMembership;
const objects_js_1 = require("../../enums/objects.js");
/**
* Checks if a key is (or is not) in a list of possible keys using the specified operation.
*
* @param source The object to check.
* @param oper The membership operation to perform (e.g. 'key_in', 'key_not_in').
* @param keys The array of possible keys.
* @returns True if the membership check is valid according to the operator, otherwise false.
*
* @throws {Error} If the operation is not recognized or keys is missing.
*
* @remarks
* Supported Operators:
* - **IN**: At least one key is present
* - **NOT_IN**: No keys are present
*/
function objectKeyMembership(source, oper, keys) {
const allKeys = [...Object.getOwnPropertyNames(source), ...Object.getOwnPropertySymbols(source)];
const operators = {
[objects_js_1.ObjectKeyMembershipEnum.IN]: (k) => allKeys.some((key) => k.includes(key)),
[objects_js_1.ObjectKeyMembershipEnum.NOT_IN]: (k) => allKeys.every((key) => !k.includes(key)),
};
const enumOper = typeof oper === 'string' ? oper : oper;
const fn = operators[enumOper];
if (!fn)
throw new Error(`Unknown ObjectKeyMembership operation: ${oper}`);
return fn(keys);
}
;