firebase-rules-parser
Version:
Parser for Firebase rule files
74 lines (73 loc) • 2.67 kB
TypeScript
import { FirebasePathAccessRights } from './FirebasePathAccessRights';
import { FirebaseRulesContext } from './FirebaseRulesContext';
import { FirestoreRulesClosure } from './FirestoreRuleClosure';
import { MockFirestoreRequest } from './MockFirestoreRequest';
import { MockFirestoreResource } from './MockFirestoreResource';
import { MatchPattern } from './utils/patternMatch';
export declare type AllowKey = 'create' | 'read' | 'write' | 'update' | 'list' | 'delete';
export interface AllowRule {
pattern: MatchPattern;
allowKeys: AllowKey[];
if: ExpressionCallback;
}
export declare type ExpressionCallback = (context: ExtendedFirebaseRulesContext, closure: FirestoreRulesClosure) => any;
interface ExtendedFirebaseRulesContext extends FirebaseRulesContext {
exit: boolean;
hasAccess: {
create?: boolean;
read?: boolean;
write?: boolean;
update?: boolean;
list?: boolean;
delete?: boolean;
};
path: string;
}
export interface FirestoreRulesFunctionDescriptor {
callback: (context: FirebaseRulesContext, closure: FirestoreRulesClosure, self?: any) => any;
argNames: string[];
}
export declare const defaultFirebaseRulesContext: Partial<FirebaseRulesContext>;
/**
* Create a default firebare rule context to be used when calling rules rights.
*
* Function uses deep merge, so you can set needed values in sub objects like,
* ```typescript
* createFirebaseRulesContext({
* auth: {
* uid: '123'
* }
* });
* ```
* This will override only the uid property and will leave other properties intact.
*
* @export
* @param {Partial<FirebaseRulesContext>} [overrides] Values, to be overrided from default values.
* @param {boolean} authenticated When true, a default mock user info is given for context. Default value is `false`.
* @returns {FirebaseRulesContext}
*/
export declare function createFirebaseRulesContext(overrides?: Partial<FirebaseRulesContext>, authenticated?: boolean): FirebaseRulesContext;
/**
* Firebase Rules Intepreter testing user rights based on rules script
*/
export declare class FirebaseRulesIntepreter {
private _parser;
request: MockFirestoreRequest;
resource: MockFirestoreResource;
/**
* Get the namespace used in rules -file
*
* @readonly
* @memberof RulesParser
*/
readonly namespace: string;
constructor();
init: (rulesFile: string) => FirebaseRulesIntepreter;
/**
* Elaborate access rights for given path within given context
*
* @memberof RulesParser
*/
hasAccess: (path: string, context: FirebaseRulesContext) => FirebasePathAccessRights;
}
export {};