firebase-rules-parser
Version:
Parser for Firebase rule files
116 lines • 8.2 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Determine whether the list contains all elements in another list.
*/
const hasAll = (context, closure, self) => {
if (self === undefined) {
throw new Error(`hasAll() -member function did not found refering object.`);
}
const list = closure.self.list;
if (!list) {
throw new Error(`hasAll() -member function did get an list argument.`);
}
if (!Array.isArray(list)) {
throw new Error(`hasAll() -member function expects list argument to be an array, but got an ${typeof list}.`);
}
if (Array.isArray(self)) {
for (const element of self) {
if (!list.includes(element)) {
return false;
}
}
return true;
}
throw new Error(`hasAll() can only be called for an array, Found type : ${typeof self} .`);
};
/**
* Determine whether the list contains any element in another list.
*/
const hasAny = (context, closure, self) => {
if (self === undefined) {
throw new Error(`hasAny() -member function did not found refering object.`);
}
const list = closure.self.list;
if (!list) {
throw new Error(`hasAny() -member function did get an list argument.`);
}
if (!Array.isArray(list)) {
throw new Error(`hasAny() -member function expects list argument to be an array, but got an ${typeof list}.`);
}
if (Array.isArray(self)) {
for (const element of self) {
if (list.includes(element)) {
return true;
}
}
return false;
}
throw new Error(`hasAny() can only be called for an array, Found type : ${typeof self} .`);
};
/**
* Determine whether all elements in the list are present in another list.
*/
const hasOnly = (context, closure, self) => {
if (self === undefined) {
throw new Error(`hasOnly() -member function did not found refering object.`);
}
const list = closure.self.list;
if (!list) {
throw new Error(`hasOnly() -member function did get an list argument.`);
}
if (!Array.isArray(list)) {
throw new Error(`hasOnly() -member function expects list argument to be an array, but got an ${typeof list}.`);
}
if (Array.isArray(self)) {
for (const element of self) {
if (!list.includes(element)) {
return false;
}
}
return true;
}
throw new Error(`hasOnly() can only be called for an array, Found type : ${typeof self} .`);
};
/**
* Join the elements in the list into a string, with a separator.
*/
const join = (context, closure, self) => {
if (self === undefined) {
throw new Error(`join() -member function did not found refering object.`);
}
const separator = closure.self.separator;
if (!separator) {
throw new Error(`join() -member function did get an separator argument.`);
}
if (typeof separator !== 'string') {
throw new Error(`join() -member function expects separator argument to be a string, but got an ${typeof separator}.`);
}
if (Array.isArray(self)) {
return self.reduce((tail, value) => (tail ? tail + ',' + value : value), '');
}
throw new Error(`join() can only be called for an array, Found type : ${typeof self} .`);
};
function registerListFunctions(closure) {
const mapFunctions = {
hasAll: {
callback: hasAll,
argNames: ['list'],
},
hasAny: {
callback: hasAny,
argNames: ['list'],
},
hasOnly: {
callback: hasOnly,
argNames: ['list'],
},
join: {
callback: join,
argNames: ['separator'],
},
};
closure.self = Object.assign({}, closure.self, mapFunctions);
}
exports.default = registerListFunctions;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW50ZXByZXRlci9zeXN0ZW0vbGlzdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFLQTs7R0FFRztBQUNILE1BQU0sTUFBTSxHQUFHLENBQUMsT0FBNkIsRUFBRSxPQUE4QixFQUFFLElBQVMsRUFBTyxFQUFFO0lBQy9GLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtRQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7S0FDN0U7SUFDRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUMvQixJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0tBQ3hFO0lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4RUFBOEUsT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQy9HO0lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3ZCLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxFQUFFO1lBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMzQixPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztLQUNiO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQzdGLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxNQUFNLEdBQUcsQ0FBQyxPQUE2QixFQUFFLE9BQThCLEVBQUUsSUFBVSxFQUFPLEVBQUU7SUFDaEcsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1FBQ3RCLE1BQU0sSUFBSSxL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
;