reflect

Functions for runtime type inspection and reflection.


isEmpty

reflect.isEmpty(ANY value): Returns true if the value is an empty array or empty object, false otherwise. For non-container types, returns false.

Example:

policy "require_permissions"
permit
  var permissions = subject.permissions;
  !reflect.isEmpty(permissions);     // deny if no permissions
  reflect.isEmpty([]);               // true
  reflect.isEmpty({});               // true
  reflect.isEmpty(["read", "write"]); // false

isArray

reflect.isArray(ANY value): Returns true if the value is a JSON array, false otherwise.

Example:

policy "validate_permissions_array"
permit
  var permissions = subject.permissions;
  reflect.isArray(permissions);      // true if permissions is an array
  reflect.isArray([]);               // true (empty array)
  reflect.isArray(["read", "write"]);// true
  reflect.isArray({"role": "admin"});// false (object)
  reflect.isArray(undefined);        // false

isDefined

reflect.isDefined(ANY value): Returns true if the value is defined (not undefined and not an error), false otherwise. null is considered defined.

Example:

policy "require_attribute"
permit
  var role = subject.role;
  reflect.isDefined(role);           // true if role exists (even if null)
  reflect.isDefined(null);           // true
  reflect.isDefined(undefined);      // false

isNull

reflect.isNull(ANY value): Returns true if the value is JSON null, false otherwise. This is distinct from undefined.

Example:

policy "check_optional_field"
permit
  var department = subject.department;
  reflect.isNull(department);        // true if explicitly set to null
  reflect.isNull(null);              // true
  reflect.isNull(undefined);         // false
  reflect.isNull("");                // false

isError

reflect.isError(ANY value): Returns true if the value represents an error, false otherwise.

Example:

policy "handle_computation_errors"
permit
  var result = resource.computedValue;
  !reflect.isError(result);          // deny if computation failed
  reflect.isError(10 / 0);           // true (division by zero)
  reflect.isError(100);              // false
  reflect.isError(undefined);        // false

isObject

reflect.isObject(ANY value): Returns true if the value is a JSON object, false otherwise.

Example:

policy "validate_user_object"
permit
  var user = resource.owner;
  reflect.isObject(user);              // true if user is an object
  reflect.isObject({});                // true
  reflect.isObject(["admin", "user"]); // false
  reflect.isObject(null);              // false

isInteger

reflect.isInteger(ANY value): Returns true if the value is a number with no fractional part, false otherwise. Numbers like 1, 1.0, and 2.00 are considered integers, while 1.5 and 2.7 are not.

Example:

policy "validate_permission_mask"
permit
  var mask = subject.permissionMask;
  reflect.isInteger(mask);           // true for integer permission values
  reflect.isInteger(7);              // true
  reflect.isInteger(5.0);            // true (no fractional part)
  reflect.isInteger(2.7);            // false (has fractional part)
  reflect.isInteger("7");            // false (not a number)

isText

reflect.isText(ANY value): Returns true if the value is a text string, false otherwise.

Example:

policy "validate_username"
permit
  var username = subject.username;
  reflect.isText(username);          // true if username is a string
  reflect.isText("");                // true
  reflect.isText(123);               // false
  reflect.isText(undefined);         // false

isNumber

reflect.isNumber(ANY value): Returns true if the value is a number, false otherwise. All numbers are stored as arbitrary-precision decimals internally.

Example:

policy "validate_age_threshold"
permit
  var ageLimit = resource.minimumAge;
  reflect.isNumber(ageLimit);        // true if numeric
  reflect.isNumber(18);              // true
  reflect.isNumber(99.5);            // true
  reflect.isNumber("18");            // false (text, not number)
  reflect.isNumber(null);            // false

isBoolean

reflect.isBoolean(ANY value): Returns true if the value is a boolean (true or false), false otherwise.

Example:

policy "validate_flag"
permit
  var isActive = subject.isActive;
  reflect.isBoolean(isActive);       // true if isActive is boolean
  reflect.isBoolean(true);           // true
  reflect.isBoolean(false);          // true
  reflect.isBoolean(1);              // false
  reflect.isBoolean("true");         // false

isUndefined

reflect.isUndefined(ANY value): Returns true if the value is undefined, false otherwise. This is distinct from null or an error.

Example:

policy "check_missing_attribute"
permit
  var attribute = subject.optionalAttr;
  reflect.isUndefined(attribute);    // true if attribute not present
  reflect.isUndefined(undefined);    // true
  reflect.isUndefined(null);         // false

typeOf

reflect.typeOf(ANY value): Returns a text string describing the type of the value. Possible return values are: "ARRAY", "OBJECT", "STRING", "NUMBER", "BOOLEAN", "NULL", "undefined", or "ERROR".

Example:

policy "dynamic_type_validation"
permit
  var data = resource.metadata;
  reflect.typeOf(data.tags) == "ARRAY";
  reflect.typeOf(data) == "OBJECT";
  reflect.typeOf(data.name) == "STRING";
  reflect.typeOf(data.version) == "NUMBER";
  reflect.typeOf(data.enabled) == "BOOLEAN";