@viewdo/dxp-story-cli
Version:
DXP Story Management CLI
272 lines • 14 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ConfigurationManager = void 0;
const typedi_1 = require("typedi");
const path = __importStar(require("path"));
const CDNConfiguration_1 = require("../models/configuration/CDNConfiguration");
const DXPConfiguration_1 = require("../models/configuration/DXPConfiguration");
const OrganizationAssetConfiguration_1 = require("../models/configuration/OrganizationAssetConfiguration");
const OrganizationConfiguration_1 = require("../models/configuration/OrganizationConfiguration");
const PreviewConfiguration_1 = require("../models/configuration/PreviewConfiguration");
const StoryAssetConfiguration_1 = require("../models/configuration/StoryAssetConfiguration");
const StoryConfiguration_1 = require("../models/configuration/StoryConfiguration");
const ConfigurationFileService_1 = require("../services/ConfigurationFileService");
const FileService_1 = require("../services/FileService");
const PreviewService_1 = require("../services/PreviewService");
const ConsoleService_1 = require("../services/ConsoleService");
const Utilities_1 = require("../services/Utilities");
const ContentType_1 = require("../models/configuration/support/ContentType");
const EmailTemplate_1 = require("../models/configuration/support/EmailTemplate");
const class_transformer_1 = require("class-transformer");
let ConfigurationManager = class ConfigurationManager {
constructor(file_service, preview_service, console_service) {
this.file_service = file_service;
this.preview_service = preview_service;
this.console_service = console_service;
this._readConfig();
}
_readConfig() {
this._config_accessor = new ConfigurationFileService_1.ConfigurationFileService(`./${DXPConfiguration_1.DXPConfiguration.file_name}`, DXPConfiguration_1.DXPConfiguration);
let config = new DXPConfiguration_1.DXPConfiguration();
config.cdn = new CDNConfiguration_1.CDNConfiguration();
this.config = this._config_accessor.read(config);
if (this.config.cdn == undefined)
this.config.cdn = new CDNConfiguration_1.CDNConfiguration();
}
get exists() {
return this._config_accessor.exists();
}
get cdn() {
return this.config.cdn;
}
getAllStoryAssets(story_keys) {
return (0, Utilities_1.flattenArray)(this.getStoryConfigurations(story_keys).map((story_config) => {
let asset_config = this.getStoryAssetConfig(story_config.key);
return story_config
.getAssets()
.map((f) => asset_config.getLocalPath(f));
}));
}
// Story Configurations ------------------
getStoryDirectory(story_key) {
return `./stories/${story_key}`;
}
_storyConfigAccessor(story_key) {
return new ConfigurationFileService_1.ConfigurationFileService(`${this.getStoryDirectory(story_key)}/${StoryConfiguration_1.StoryConfiguration.file_name}`, StoryConfiguration_1.StoryConfiguration);
}
hasStoryConfig(story_key) {
return this._storyConfigAccessor(story_key).exists();
}
setStoryConfig(story) {
let config_accessor = this._storyConfigAccessor(story.key);
config_accessor.write(new StoryConfiguration_1.StoryConfiguration().convertFromModel(story));
return this.getStoryConfig(story.key);
}
saveStoryConfig(story) {
let config_accessor = this._storyConfigAccessor(story.key);
config_accessor.write(story);
}
setStoryAssetConfig(story_config) {
let asset_config = new StoryAssetConfiguration_1.StoryAssetConfiguration();
if (this.story_keys.includes(story_config.key))
asset_config = this.getStoryAssetConfig(story_config.key);
asset_config.prepareForWrite(story_config);
if (!this.story_keys.includes(story_config.key))
this.config.stories.push(asset_config);
this.save();
return asset_config;
}
getStoryConfig(story_key) {
const config = this._storyConfigAccessor(story_key).read({ key: story_key });
config.htmlTemplates = this.getLocalStoryTemplateConfig(story_key, 'html-templates');
config.emailTemplates = this.getLocalStoryTemplateConfig(story_key, 'email-templates');
config.textTemplates = this.getLocalStoryTemplateConfig(story_key, 'text-templates');
return config;
}
getStoryAssetConfig(story_key) {
if (!this.story_keys.includes(story_key))
return undefined;
return this.config.stories.find((s) => s.key == story_key);
}
getLocalStoryTemplateConfig(story_key, template_path) {
const config = this._storyConfigAccessor(story_key).read({ key: story_key });
const filePath = path.join(config.local_root, template_path);
if (!this.file_service.exists(filePath)) {
this.console_service.warn(`Skipping empty ${template_path} directory`);
return [];
}
return this.file_service.getFilesInDirectory(filePath).map((t) => {
const fileType = path.extname(t.file).toLowerCase();
// Check if the file type is supported and skip if not
if (!ContentType_1.extensionToContentType[fileType]) {
this.console_service.warn(`Skipping ${t.file} with unsupported file type ${fileType}`);
return;
}
const templateKey = config.getTemplateKey(t.path, t.file);
// Create a basic object with common properties
let templateObj = {
key: templateKey,
name: config.getTemplateName(templateKey),
path: t.path,
file: t.file,
type: ContentType_1.extensionToContentType[fileType]
};
// If dealing with email templates, convert to EmailTemplate instances
if (template_path === 'email-templates') {
templateObj = (0, class_transformer_1.plainToClass)(EmailTemplate_1.EmailTemplate, templateObj);
}
return templateObj;
}).filter(Boolean); // Filter out undefined values (for files with unsupported types)
}
get story_keys() {
return this.config.stories.map((s) => s.key);
}
getStoryConfigurations(story_keys) {
return story_keys.map((story_key) => this.getStoryConfig(story_key));
}
// Organization Configurations ------------------
getOrganizationDirectory(org_key) {
return `./organizations/${org_key}`;
}
_orgConfigAccessor(org_key) {
return new ConfigurationFileService_1.ConfigurationFileService(`${this.getOrganizationDirectory(org_key)}/${OrganizationConfiguration_1.OrganizationConfiguration.file_name}.yml`, OrganizationConfiguration_1.OrganizationConfiguration);
}
hasOrganizationConfig(org_key) {
return this._orgConfigAccessor(org_key).exists();
}
setOrganizationConfig(organization) {
let config_accessor = this._orgConfigAccessor(organization.key);
config_accessor.write(config_accessor.deserialize(organization));
return config_accessor.read();
}
setOrganizationAssetConfig(org_config) {
let asset_config = new OrganizationAssetConfiguration_1.OrganizationAssetConfiguration();
if (this.organization_keys.includes(org_config.key))
asset_config = this.getOrganizationAssetConfig(org_config.key);
asset_config.prepareForWrite(org_config);
if (!this.organization_keys.includes(org_config.key))
this.config.organizations.push(asset_config);
this.save();
return asset_config;
}
getOrganizationConfig(org_key) {
let org_config = this._orgConfigAccessor(org_key).read();
if (org_config.dataPoints) {
org_config.dataPoints.forEach((data, index) => (data.order = index));
}
return org_config;
}
getOrganizationAssetConfig(org_key) {
if (!this.organization_keys.includes(org_key))
return undefined;
return this.config.organizations.find((o) => o.key == org_key);
}
get organization_keys() {
return this.config.organizations.map((o) => o.key);
}
getStoriesOrganizationKeys(story_keys) {
let organization_keys = this.config.stories
.filter((s) => story_keys.includes(s.key))
.map((s) => s.organization_key) || [];
return [...new Set(organization_keys)];
}
getOrganizationStoryKeys(organization_key) {
return this.config.stories
.filter((s) => s.organization_key == organization_key)
.map((s) => s.key);
}
getOrganizationConfigurations(org_keys) {
return org_keys.map((org_key) => this.getOrganizationConfig(org_key));
}
// Preview Configurations ------------------
_previewConfigAccessor(story_key) {
return new ConfigurationFileService_1.ConfigurationFileService(`${this.getStoryDirectory(story_key)}/${PreviewConfiguration_1.PreviewConfiguration.file_name}.yml`, PreviewConfiguration_1.PreviewConfiguration);
}
resetPreviewConfig(story_key) {
let story_config = this.getStoryConfig(story_key);
let org_config = this.getOrganizationConfig(story_config.organizationKey);
this._previewConfigAccessor(story_config.key).write(new PreviewConfiguration_1.PreviewConfiguration().setup(story_config, org_config));
return this._previewConfigAccessor(story_config.key).read();
}
setPreviewConfig(story_config) {
let org_config = this.getOrganizationConfig(story_config.organizationKey);
this._previewConfigAccessor(story_config.key).write(new PreviewConfiguration_1.PreviewConfiguration().setup(story_config, org_config), false);
return this._previewConfigAccessor(story_config.key).read();
}
getPreviewConfig(story_key) {
return this._previewConfigAccessor(story_key).read();
}
getStoryData(story, asset_config, episode_key) {
let asset_definition = story.getAssetDefinition("json_file");
if (story.episodes.find((e) => e.key == episode_key)) {
let episode_index = story.episodes.findIndex((e) => e.key == episode_key);
asset_definition = story.getAssetDefinition(story._getEpisodeAssetKey(episode_index, "json_file"));
}
if (!asset_definition)
return {};
let story_data_path = asset_config.getLocalPath(asset_definition);
let content = this.file_service.read(story_data_path);
let story_data = content ? JSON.parse(asset_definition.convertFromLocal(content)) : {};
return story_data;
}
getActionDataFromConfigurations(story_key, action_key) {
let story_config = this.getStoryConfig(story_key);
const config = story_config.actions.find((a) => a.key == action_key);
// @ts-ignore
config.secrets = {};
return config;
}
getExperiencePreviewFromConfigurations(story_key, episode_key) {
let preview_config = this.getPreviewConfig(story_key);
let story_config = this.getStoryConfig(story_key);
let org_config = this.getOrganizationConfig(story_config.organizationKey);
let story_asset_config = this.getStoryAssetConfig(story_key);
let story_data = this.getStoryData(story_config, story_asset_config, episode_key || preview_config.currentEpisodeKey || "default");
return this.preview_service.formatPreview(preview_config, org_config, story_config, story_asset_config, episode_key, story_data);
}
save() {
this.config.organizations.sort((a, b) => (a.key > b.key ? 1 : -1));
this.config.stories.sort((a, b) => (a.key > b.key ? 1 : -1));
this._config_accessor.write(this.config);
}
};
exports.ConfigurationManager = ConfigurationManager;
exports.ConfigurationManager = ConfigurationManager = __decorate([
(0, typedi_1.Service)(),
__metadata("design:paramtypes", [FileService_1.FileService,
PreviewService_1.PreviewService,
ConsoleService_1.ConsoleService])
], ConfigurationManager);
//# sourceMappingURL=ConfigurationManager.js.map