jinaga
Version:
Data management for web and mobile applications.
83 lines • 2.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.describeDistributionRules = exports.DistributionRules = void 0;
const description_1 = require("../specification/description");
const feed_builder_1 = require("../specification/feed-builder");
const specification_parser_1 = require("../specification/specification-parser");
class ShareTarget {
constructor(specification, rules) {
this.specification = specification;
this.rules = rules;
}
with(user) {
return new DistributionRules([
...this.rules,
{
specification: this.specification,
feeds: (0, feed_builder_1.buildFeeds)(this.specification),
user: user.specification
}
]);
}
withEveryone() {
return new DistributionRules([
...this.rules,
{
specification: this.specification,
feeds: (0, feed_builder_1.buildFeeds)(this.specification),
user: null
}
]);
}
}
class DistributionRules {
constructor(rules) {
this.rules = rules;
}
with(rules) {
return rules(this);
}
share(specification) {
return new ShareTarget(specification.specification, this.rules);
}
saveToDescription() {
let description = "distribution {\n";
for (const rule of this.rules) {
const specificationDescription = (0, description_1.describeSpecification)(rule.specification, 1).trimStart();
const userDescription = rule.user ? (0, description_1.describeSpecification)(rule.user, 1).trimStart() : "everyone\n";
description += ` share ${specificationDescription} with ${userDescription}`;
}
description += "}\n";
return description;
}
merge(distributionRules2) {
return new DistributionRules([
...this.rules,
...distributionRules2.rules
]);
}
static combine(distributionRules, specification, user) {
return new DistributionRules([
...distributionRules.rules,
{
specification,
feeds: (0, feed_builder_1.buildFeeds)(specification),
user
}
]);
}
static loadFromDescription(description) {
const parser = new specification_parser_1.SpecificationParser(description);
parser.skipWhitespace();
const distributionRules = parser.parseDistributionRules();
return distributionRules;
}
}
exports.DistributionRules = DistributionRules;
DistributionRules.empty = new DistributionRules([]);
function describeDistributionRules(rules) {
const distributionRules = rules(new DistributionRules([]));
return distributionRules.saveToDescription();
}
exports.describeDistributionRules = describeDistributionRules;
//# sourceMappingURL=distribution-rules.js.map