firebase-rules-parser
Version:
Parser for Firebase rule files
120 lines • 7.52 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Returns a lowercase version of the input string.
*/
const lower = (context, closure, self) => {
if (typeof self !== 'string') {
throw new Error(`Can not call lower() -method on non string object: ${self}`);
}
return self.toLowerCase();
};
/**
* Returns the number of characters in the string.
*/
const size = (context, closure, self) => {
const type = typeof self;
if (Array.isArray(self) || type === 'string') {
return self.length;
}
if (type === 'object') {
return Object.keys(self).length;
}
throw new Error(`Can not call length() -method on non string object: ${self}`);
};
/**
* Boolean, integer, float, and null values can be converted into strings using the string() function:
*/
const string = (context, closure, self) => {
const stringWannabe = closure.getValue('value');
if (stringWannabe === undefined) {
throw new Error(`string() -method did not have an argument.`);
}
if (stringWannabe === null) {
return 'null';
}
switch (typeof stringWannabe) {
case 'string':
case 'boolean':
case 'number':
return JSON.stringify(stringWannabe);
default:
throw new Error(`Can not conver type of: ${typeof stringWannabe} to string.`);
}
};
/**
* Splits a string according to a regular expression.
*/
const split = (context, closure, self) => {
if (typeof self !== 'string') {
throw new Error(`Can not call split() -method on non string object: ${self}`);
}
const re = closure.getValue('re');
if (!re) {
throw new Error(`split() -method did not have an argument.`);
}
return self.split(re);
};
/**
* Performs a regular expression match on the whole string.
*/
const matches = (context, closure, self) => {
if (typeof self !== 'string') {
throw new Error(`Can not call matches() -method on non string object: ${self}`);
}
const re = closure.getValue('re');
if (!re) {
throw new Error(`matches() -method did not have an argument.`);
}
return self.match(re) !== null; // TODO user actual Google RE2 syntax
};
/**
* Returns a version of the string with leading and trailing spaces removed.
*/
const trim = (context, closure, self) => {
if (typeof self !== 'string') {
throw new Error(`Can not call trim() -method on non string object: ${self}`);
}
return self.trim();
};
const upper = (context, closure, self) => {
if (typeof self !== 'string') {
throw new Error(`Can not call upper() -method on non string object: ${self}`);
}
return self.toUpperCase();
};
function registerStringFunctions(closure) {
const stringFunctions = {
lower: {
callback: lower,
argNames: [],
},
matches: {
callback: matches,
argNames: ['re'],
},
size: {
callback: size,
argNames: [],
},
split: {
callback: split,
argNames: ['re'],
},
string: {
callback: string,
argNames: ['value'],
},
trim: {
callback: trim,
argNames: [],
},
upper: {
callback: upper,
argNames: [],
},
};
closure.self = Object.assign({}, closure.self, stringFunctions);
}
exports.default = registerStringFunctions;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbnRlcHJldGVyL3N5c3RlbS9zdHJpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0E7O0dBRUc7QUFDSCxNQUFNLEtBQUssR0FBRyxDQUFDLE9BQTZCLEVBQUUsT0FBOEIsRUFBRSxJQUFTLEVBQU8sRUFBRTtJQUM5RixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQy9FO0lBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLElBQUksR0FBRyxDQUFDLE9BQTZCLEVBQUUsT0FBOEIsRUFBRSxJQUFTLEVBQU8sRUFBRTtJQUM3RixNQUFNLElBQUksR0FBRyxPQUFPLElBQUksQ0FBQztJQUN6QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUM1QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDcEI7SUFDRCxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7UUFDckIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztLQUNqQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELElBQUksRUFBRSxDQUFDLENBQUM7QUFDakYsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLE1BQU0sR0FBRyxDQUFDLE9BQTZCLEVBQUUsT0FBOEIsRUFBRSxJQUFVLEVBQU8sRUFBRTtJQUNoRyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRTtRQUMvQixNQUFNLElBQUksS0FB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
;