UNPKG

firebase-rules-parser

Version:
120 lines 7.52 kB
"use strict"; 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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