UNPKG

pmcf

Version:

Poor mans configuration management

77 lines (63 loc) 1.54 kB
import { Base, Service } from "pmcf"; export class ServiceOwner extends Base { _services = []; get services() { return this._services; } /** * @param {Service} service */ set services(service) { this._services.push(service); } _applyExtends(owner) { super._applyExtends(owner); for (const service of owner.services) { const present = this._services.find(s => s.name === service.name); if (present && service.isTemplate) { if (present.extends.indexOf(service) < 0) { present.extends.push(service); } } else { this.services = service.forOwner(this); } } } _traverse(...args) { if (super._traverse(...args)) { for (const service of this._services) { service._traverse(...args); } return true; } return false; } *findServices(filter) { const services = filter ? this.expression(`services[${filter}]`) : this.services; for (const service of services) { yield service; } } typeNamed(typeName, name) { if (typeName === "service") { const service = this.services.find(s => s.name === name); if (service) { return service; } } if (typeName === "number") { throw new Error("invalidType", { cause: typeName }); } return super.typeNamed(typeName, name); } /** * * @param {string} name * @returns {Service|undefined} */ named(name) { return this._services.find(s => s.name === name); } }