UNPKG

@jahed/firebase-rules

Version:

A type-safe Firebase Real-time Database Security Rules builder.

49 lines 1.97 kB
import { createRuleObject } from "./object.js"; import { allOf } from "./operator.js"; import { createRuleBoolean, createRuleNumber } from "./primitive.js"; import { toJSONString } from "./serialise.js"; import { createRuleString } from "./string.js"; /** * Creates a representation of a Firebase RuleDataSnapshots for use in rules. * * Note that `val()` is not type-specific so it's not available. Use `isString`, * `isNumber`, etc. to apply rules to `val()`. * * `data.isString(val => lessThan(val.length, 100))` is the same as * `data.isString() && data.val().length < 100`. * * https://firebase.google.com/docs/reference/security/database#ruledatasnapshot_methods */ export const createRuleDataSnapshot = (name) => { return createRuleObject(name, { isString: (valRule) => { const baseRule = createRuleBoolean(`${name}.isString()`); return valRule ? allOf(baseRule, valRule(createRuleString(`${name}.val()`))) : baseRule; }, isBoolean: (valRule) => { const baseRule = createRuleBoolean(`${name}.isBoolean()`); return valRule ? allOf(baseRule, valRule(createRuleBoolean(`${name}.val()`))) : baseRule; }, isNumber: (valRule) => { const baseRule = createRuleBoolean(`${name}.isNumber()`); return valRule ? allOf(baseRule, valRule(createRuleNumber(`${name}.val()`))) : baseRule; }, exists: () => { return createRuleBoolean(`${name}.exists()`); }, hasChildren: (keys) => { return createRuleBoolean(`${name}.hasChildren(${toJSONString(keys)})`); }, child: (...parts) => { const key = parts.map((part) => toJSONString(part)).join(" + "); return createRuleDataSnapshot(`${name}.child(${key})`); }, }); }; //# sourceMappingURL=dataSnapshot.js.map