UNPKG

@viewdo/dxp-story-cli

Version:
305 lines 17.4 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; Object.defineProperty(exports, "__esModule", { value: true }); var SyncManager = /** @class */ (function () { // TODO: move all options to the last parameter function SyncManager(options, _a, configuration_manager, auth_manager) { var file_service = _a.file_service, api_service = _a.api_service, task_service = _a.task_service, console_service = _a.console_service; this.configuration_manager = configuration_manager; this.auth_manager = auth_manager; this.api_service = api_service; this.file_service = file_service; this.task_service = task_service; this.console_service = console_service; } SyncManager.prototype._getToken = function () { this.api_service = this.api_service.withToken(this.auth_manager.token); }; // domain API proxy ----- SyncManager.prototype.storyExists = function (story_key) { this._getToken(); return this.api_service.storyExists(story_key); }; SyncManager.prototype.getStory = function (story_key) { this._getToken(); return this.api_service.getStory(story_key); }; SyncManager.prototype.getOrganization = function (organization_key) { return __awaiter(this, void 0, void 0, function () { var organization, services; return __generator(this, function (_a) { switch (_a.label) { case 0: this._getToken(); return [4 /*yield*/, this.api_service.getOrganization(organization_key)]; case 1: organization = _a.sent(); return [4 /*yield*/, this.api_service.getOrganizationServices(organization_key)]; case 2: services = _a.sent(); organization.services = services; return [2 /*return*/, organization]; } }); }); }; SyncManager.prototype._setOrganization = function (organization_key, sync_id) { this._getToken(); var organization_config = this.configuration_manager.getOrganizationConfig(organization_key); return this.api_service.setOrganization(organization_key, organization_config, sync_id); }; SyncManager.prototype.getOrganizationStories = function (organization_key) { this._getToken(); return this.api_service.getOrganizationStories(organization_key); }; SyncManager.prototype._getAsset = function (asset) { this._getToken(); return this.api_service.getFile(asset.remote_path) .then(function (content) { return asset.convertFromRemote(content); }); }; SyncManager.prototype._pushAsset = function (asset, content) { this._getToken(); return this.api_service.putFile(asset.remote_path, asset.convertFromLocal(content)); }; // Organizations ---------------------------------------------- // PULL SyncManager.prototype.pullOrganizations = function (organization_keys) { var _this = this; return this.task_service.runTasks(organization_keys.map(function (org_key) { return _this._pullOrganization(org_key); })) .then(function (ctx) { return ctx.success == false ? 1 : 0; }); }; SyncManager.prototype._pullOrganization = function (org_key) { var _this = this; return this.task_service.createTaskSet("Get Organization " + org_key + " from DXP:" + process.env.NAMESPACE, function (ctx, task) { return _this.getOrganization(org_key).then(function (org) { var config = _this.configuration_manager.setOrganizationConfig(org); _this.configuration_manager.setOrganizationAssetConfig(config); return _this._getOrganizationPullTasks(org_key); }); }); }; SyncManager.prototype._getOrganizationPullTasks = function (org_key) { var _this = this; var organization_config = this.configuration_manager.getOrganizationConfig(org_key); var asset_config = this.configuration_manager.getOrganizationAssetConfig(org_key); return this.task_service.createSubTasksFromCollection(organization_config.getAssets(this.configuration_manager.format), function (t) { return t.name; }, function (t) { return t.skip; }, function (ctx, task, file) { return _this._getAsset(file) .then(function (content) { _this.file_service.write(asset_config.getLocalPath(file), content); }).catch(function (e) { return task.skip(e.message); }); }); }; SyncManager.prototype.pushOrganizations = function (organization_keys, sync_id) { var _this = this; return this.task_service.runTasks(organization_keys.map(function (organization_key) { return _this._pushOrganization(organization_key, sync_id); })) .then(function (ctx) { return ctx.success == false ? 1 : 0; }); }; SyncManager.prototype._pushOrganization = function (organization_key, sync_id) { var _this = this; return this.task_service.createTaskSet("Push Organization " + organization_key + " to DXP:" + process.env.NAMESPACE, function (ctx, task) { return _this._setOrganization(organization_key, sync_id) .then(function (o) { return _this._getOrganizationPushTasks(organization_key); }); }); }; SyncManager.prototype._getOrganizationPushTasks = function (organization_key) { var _this = this; var organization_config = this.configuration_manager.getOrganizationConfig(organization_key); var asset_config = this.configuration_manager.getOrganizationAssetConfig(organization_key); return this.task_service.createSubTasksFromCollection(organization_config.getAssets(this.configuration_manager.format), function (t) { return t.name; }, function (t) { return t.skip; }, function (ctx, task, file) { var content = _this.file_service.read(asset_config.getLocalPath(file)); return _this._pushAsset(file, content) .catch(function (e) { return task.skip(e.message); }); }); }; // Stories ---------------------------------------------- // PULL SyncManager.prototype.pullStories = function (story_keys) { var _this = this; return this.task_service.runTasks(story_keys.map(function (story_key) { return _this._pullStory(story_key); })) .then(function (ctx) { return ctx.success == false ? 1 : 0; }); }; SyncManager.prototype._pullStory = function (story_key) { var _this = this; return this.task_service.createTaskSet("Get Story " + story_key + " from DXP:" + process.env.NAMESPACE, function (ctx, task) { return _this.getStory(story_key).then(function (story) { var config = _this.configuration_manager.setStoryConfig(story); _this.configuration_manager.setStoryAssetConfig(config); _this.configuration_manager.setPreviewConfig(config); return _this._getStoryPullTasks(story_key); }); }); }; SyncManager.prototype._getStoryPullTasks = function (story_key) { var _this = this; var story_config = this.configuration_manager.getStoryConfig(story_key); var asset_config = this.configuration_manager.getStoryAssetConfig(story_key); return this.task_service.createSubTasksFromCollection(story_config.getAssets(this.configuration_manager.format), function (t) { return t.name; }, function (t) { return t.skip; }, function (ctx, task, file) { task.output = file.remote_path; return _this._getAsset(file) .then(function (content) { if (content) { _this.file_service.write(asset_config.getLocalPath(file), content); } else { _this.file_service.write(asset_config.getLocalPath(file), ''); } }) .catch(function (e) { return task.skip(e.message); }); }); }; // PUSH API ---------------------------------------------- SyncManager.prototype.pushStories = function (story_keys) { var _this = this; return this.task_service.runTasks(story_keys.map(function (story_key) { return _this._pushStory(story_key); })) .then(function (ctx) { return ctx.success == false ? 1 : 0; }); }; SyncManager.prototype._pushStory = function (story_key) { var _this = this; return this.task_service.createTaskSet( // TODO: Use local config, if it exists "Push Story " + story_key + " from DXP:" + process.env.NAMESPACE, function (ctx, task) { return Promise.resolve(_this._getStoryPushTasks(story_key)); }); }; SyncManager.prototype._getStoryPushTasks = function (story_key) { var _this = this; var story_config = this.configuration_manager.getStoryConfig(story_key); var asset_config = this.configuration_manager.getStoryAssetConfig(story_key); return this.task_service.createSubTasksFromCollection(story_config.getAssets(this.configuration_manager.format), function (t) { return t.name; }, function (t) { return t.skip; }, function (ctx, task, file) { var content = _this.file_service.read(asset_config.getLocalPath(file)); if (content != null) { if (content.trim() == '') { task.output = 'Skipping Validation (Empty File)'; return _this._pushAsset(file, content) .catch(function (e) { return task.skip('Empty files are not yet allowed through the API. Clear them by hand if necessary'); }); //e.message)) } // no validation on js files if (!file.validate) { task.output = 'Skipping Validation for this file-type.'; return _this._pushAsset(file, content) .catch(function (e) { return task.skip(e.message); }); } task.output = 'Validating...'; return _this.api_service.validateFile(story_config.key, content) .then(function (results) { if (results.isValid) { task.output = '👍 Valid'; return _this._pushAsset(file, content); } var first_error = results.errors[0]; ctx.success = false; throw new Error("Line " + first_error.line + ": " + first_error.message); }); } task.skip('No local file to push.'); }); }; // CHECK API ---------------------------------------------- SyncManager.prototype.checkStories = function (story_keys) { var _this = this; return this.task_service.runTasks(story_keys.map(function (story_key) { return _this._checkStory(story_key); })) .then(function (ctx) { return ctx.success == false ? 1 : 0; }); }; SyncManager.prototype._checkStory = function (story_key) { var _this = this; return this.task_service.createTaskSet("Get Story " + story_key + " from DXP:" + process.env.NAMESPACE, function (ctx, task) { return Promise.resolve(_this._getCheckStoryTasks(story_key)); }); }; SyncManager.prototype._getCheckStoryTasks = function (story_key) { var _this = this; var story_config = this.configuration_manager.getStoryConfig(story_key); var asset_config = this.configuration_manager.getStoryAssetConfig(story_key); return this.task_service.createSubTasksFromCollection(story_config.getAssets(this.configuration_manager.format), function (t) { return t.name; }, function (t) { return t.skip; }, function (ctx, task, file) { return _this._getAsset(file) .then(function (content) { if (content != null) { var local_content = _this.file_service.read(asset_config.getLocalPath(file)); if (local_content != content) { if (!ctx.changes) ctx.changes = 1; else ctx.changes++; task.skip('⚠️ Local file is different and will be replaced on the server (skipped=changed) '); } } else { task.title = "No Remote " + task.title; } }) .catch(function (e) { return task.skip(e.message); }); }); }; // VALIDATE API ---------------------------------------------- SyncManager.prototype.validateStories = function (story_keys) { var _this = this; return this.task_service.runTasks(story_keys.map(function (story_key) { return _this._validateStory(story_key); })) .then(function (ctx) { return ctx.success == false ? 1 : 0; }); }; SyncManager.prototype._validateStory = function (story_key) { var _this = this; return this.task_service.createTaskSet("Get Story " + story_key + " from DXP:" + process.env.NAMESPACE, function (ctx, task) { return Promise.resolve(_this._getStoryValidateTasks(story_key)); }); }; SyncManager.prototype._getStoryValidateTasks = function (story_key) { var _this = this; var story_config = this.configuration_manager.getStoryConfig(story_key); var asset_config = this.configuration_manager.getStoryAssetConfig(story_key); return this.task_service.createSubTasksFromCollection(story_config.getAssets(this.configuration_manager.format), function (t) { return t.name; }, function (t) { return t.skip; }, function (ctx, task, file) { var content = _this.file_service.read(asset_config.getLocalPath(file)); if (content != null) { task.output = 'Validating...'; if (content.trim() == '') { task.skip('Local file is empty.'); return; } return _this.api_service.validateFile(story_config.key, content) .then(function (results) { if (!results.isValid) { task.output = 'Invalid!'; var first_error = results.errors[0]; throw new Error("Line " + first_error.line + ": " + first_error.message); } task.output = 'Valid!'; return true; }); } task.skip('No local file to validate.'); }); }; return SyncManager; }()); exports.default = SyncManager; //# sourceMappingURL=SyncManager.js.map