UNPKG

@viewdo/dxp-story-cli

Version:

DXP Story Management CLI

272 lines 14 kB
"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