@omnia/tooling-composers
Version:
Provide tooling to work with manifest things.
90 lines (89 loc) • 4.75 kB
JavaScript
;
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;