UNPKG

@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
"use strict"; 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); };