UNPKG

@omnia/tooling-composers

Version:

Provide tooling to work with manifest things.

90 lines (89 loc) 4.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ServiceFeatureComposer = void 0; const tslib_1 = require("tslib"); const models_1 = require("../../fx-models"); const AzureAdAppPermissionHelper_1 = require("./AzureAdAppPermissionHelper"); const ManifestRegistry_1 = require("./ManifestRegistry"); const ServiceFeatureRegistry_1 = require("./ServiceFeatureRegistry"); const index_1 = require("./models/index"); const deep_extend_1 = tslib_1.__importDefault(require("deep-extend")); class ServiceFeatureComposer { constructor(featureId, option) { this.featureId = featureId; this.option = option; this.AddFeature = (featureId, option) => { let manifest = { manifestType: index_1.ServerManifestTypes.ServiceFeature }; let featureManifest = (0, deep_extend_1.default)(manifest, option); featureManifest.uniqueId = featureId; featureManifest.requiresAzureAdAppPermissions = AzureAdAppPermissionHelper_1.AzureAdAppPermissionHelper.getAzureAdAppPermissions(option.requiresAzureAdAppPermissions); ServiceFeatureRegistry_1.ServiceFeatureRegistry.AddFeatureManifest(featureManifest); return this; }; /** * Request an SQL database when feature activated */ this.requestSqlDatabase = (options) => { let manifest = { manifestType: index_1.ServerManifestTypes.ResourceRequest, resourceType: index_1.RequestedResourceTypes.SqlDatabase }; const sqlResourceManifest = (0, deep_extend_1.default)(manifest, options); this.addRequestedResource(sqlResourceManifest, this.featureId); return this; }; /** * Request a Persistent Disk for storing files when feature activated */ this.requestPersistentDisk = (options) => { const manifest = { manifestType: index_1.ServerManifestTypes.ResourceRequest, resourceType: index_1.RequestedResourceTypes.PersistentDisk }; const persistentDiskResourceManifest = (0, deep_extend_1.default)(manifest, options); this.addRequestedResource(persistentDiskResourceManifest, this.featureId); return this; }; /** * Request an SQL database using shared Elastic Pool when feature activated */ this.requestSqlElasticPoolDatabase = (options) => { const manifest = { manifestType: index_1.ServerManifestTypes.ResourceRequest, resourceType: index_1.RequestedResourceTypes.SqlElasticPoolDatabase }; const sqlElasticPoolResourceManifest = (0, deep_extend_1.default)(manifest, options); this.addRequestedResource(sqlElasticPoolResourceManifest, this.featureId); return this; }; this.requestOnTheFlyService = (onTheFlyService) => { const featureManifest = ServiceFeatureRegistry_1.ServiceFeatureRegistry.GetFeatureManifest(this.featureId); if (!Array.isArray(featureManifest.requestedOnTheFlyServices)) { featureManifest.requestedOnTheFlyServices = []; } const existed = featureManifest.requestedOnTheFlyServices.find(x => x.serviceId.toString() === onTheFlyService.serviceId.toString()); if (existed) { throw new Error(`On the fly service with id ${onTheFlyService.serviceId} has already been added to the feature.`); } featureManifest.requestedOnTheFlyServices.push(onTheFlyService); return this; }; if (featureId == models_1.Guid.empty) { throw new Error("Can't add feature with id: Guid.empty. See manifest file: " + ManifestRegistry_1.ManifestRegistry.getCurrentManifestPath()); } if (ServiceFeatureRegistry_1.ServiceFeatureRegistry.FeatureExisted[featureId.toString()]) { throw new Error("Can't add feature id " + featureId + ", a feature with the same id has already been added. See manifest file: " + ManifestRegistry_1.ManifestRegistry.getCurrentManifestPath()); } this.AddFeature(featureId, option); } addRequestedResource(requestedResourceManifest, featureId) { const featureManifest = ServiceFeatureRegistry_1.ServiceFeatureRegistry.GetFeatureManifest(featureId); if (!Array.isArray(featureManifest.requestedResources)) { featureManifest.requestedResources = []; } featureManifest.requestedResources.push(requestedResourceManifest); } } exports.ServiceFeatureComposer = ServiceFeatureComposer;