jinaga
Version:
Data management for web and mobile applications.
43 lines • 2.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RuleSet = void 0;
const authorizationRules_1 = require("../authorization/authorizationRules");
const distribution_rules_1 = require("../distribution/distribution-rules");
const purgeConditions_1 = require("../purge/purgeConditions");
const specification_parser_1 = require("../specification/specification-parser");
class RuleSet {
constructor(authorizationRules, distributionRules, purgeConditions) {
this.authorizationRules = authorizationRules;
this.distributionRules = distributionRules;
this.purgeConditions = purgeConditions;
}
static loadFromDescription(description) {
const parser = new specification_parser_1.SpecificationParser(description);
parser.skipWhitespace();
let authorizationRules = authorizationRules_1.AuthorizationRules.empty;
let distributionRules = distribution_rules_1.DistributionRules.empty;
let purgeConditions = purgeConditions_1.PurgeConditions.empty;
while (!parser.atEnd()) {
if (parser.continues("authorization")) {
authorizationRules = authorizationRules.with(a => parser.parseAuthorizationRules());
}
else if (parser.continues("distribution")) {
distributionRules = distributionRules.with(d => parser.parseDistributionRules());
}
else if (parser.continues("purge")) {
purgeConditions = purgeConditions.with(p => parser.parsePurgeConditions());
}
else {
// Throws an error.
parser.expectEnd();
}
}
return new RuleSet(authorizationRules, distributionRules, purgeConditions);
}
merge(ruleSet2) {
return new RuleSet(this.authorizationRules.merge(ruleSet2.authorizationRules), this.distributionRules.merge(ruleSet2.distributionRules), this.purgeConditions.merge(ruleSet2.purgeConditions));
}
}
exports.RuleSet = RuleSet;
RuleSet.empty = new RuleSet(authorizationRules_1.AuthorizationRules.empty, distribution_rules_1.DistributionRules.empty, purgeConditions_1.PurgeConditions.empty);
//# sourceMappingURL=RuleSet.js.map