@openfga/syntax-transformer
Version:
Javascript implementation of ANTLR Grammar for the OpenFGA DSL and parser from and to the OpenFGA JSON Syntax
53 lines (52 loc) • 2.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Validator = exports.Rules = void 0;
exports.Rules = {
type: "[^:#@\\*\\s]{1,254}",
relation: "[^:#@\\*\\s]{1,50}",
condition: "[^\\*\\s]{1,50}",
id: "[^#:\\s*][a-zA-Z0-9_|*@.+]*",
object: "[^\\s]{2,256}",
};
exports.Validator = {
// An Object is composed of a type and identifier (e.g. 'document:1')
object: (object) => {
return validateFieldValue(`^${exports.Rules.type}:${exports.Rules.id}$`, object) && validateFieldValue(`^${exports.Rules.object}$`, object);
},
// Relation reference
relation: (relation) => {
return validateFieldValue(`^${exports.Rules.relation}$`, relation);
},
// User is composed of type, identifier and relation (e.g. 'group:engineering#member')
userSet: (user) => {
return validateFieldValue(`^${exports.Rules.type}:${exports.Rules.id}#${exports.Rules.relation}$`, user);
},
// User is composed of type and identifier (e.g. 'group:engineering')
userObject: (userObject) => {
return (validateFieldValue(`^${exports.Rules.type}:${exports.Rules.id}$`, userObject) &&
validateFieldValue(`^${exports.Rules.object}$`, userObject));
},
// User is composed of type, and a wildcard (e.g. 'group:*')
userWildcard: (userWildcard) => {
return validateFieldValue(`^${exports.Rules.type}:\\*$`, userWildcard);
},
// Is either a userset, userobject or a user wildcard
user: (user) => {
return exports.Validator.userSet(user) || exports.Validator.userObject(user) || exports.Validator.userWildcard(user);
},
// Condition name
relationshipCondition: (condition) => {
return validateFieldValue(`^${exports.Rules.condition}$`, condition);
},
// Type name
type: (type) => {
return validateFieldValue(`^${exports.Rules.type}$`, type);
},
// ObjectId name
objectId: (id) => {
return validateFieldValue(`^${exports.Rules.id}$`, id);
},
};
const validateFieldValue = (rule, value) => {
return new RegExp(rule).test(value);
};