UNPKG

jinaga

Version:

Data management for web and mobile applications.

83 lines 2.96 kB
"use strict"; 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