@agility/cli
Version:
Agility CLI for working with your content. (Public Beta)
367 lines • 21 kB
JavaScript
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
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 = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
return g.next = verb(0), g["throw"] = verb(1), g["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 (g && (g = 0, op[0] && (_ = 0)), _) 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 };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Pushers = void 0;
var state_1 = require("../../core/state");
var fileOperations_1 = require("../../core/fileOperations");
var ansi_colors_1 = __importDefault(require("ansi-colors"));
var guid_data_loader_1 = require("./guid-data-loader");
var state_2 = require("../../core/state");
var push_operations_config_1 = require("./push-operations-config");
var Pushers = /** @class */ (function () {
function Pushers(config) {
if (config === void 0) { config = {}; }
this.startTime = new Date();
this.config = config;
this.fileOps = new fileOperations_1.fileOperations(state_2.state.sourceGuid[0], null);
}
/**
* Execute all push operations for source to target GUID
*/
Pushers.prototype.guidPusher = function (sourceGuid, targetGuid) {
return __awaiter(this, void 0, void 0, function () {
var startTime, results, pushResults, logFilePath, duration, error_1, logFilePath;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
startTime = Date.now();
results = {
successful: [],
failed: [],
skipped: [],
totalDuration: 0,
sourceGuidProcessed: sourceGuid,
targetGuidProcessed: targetGuid,
totalSuccess: 0,
totalFailures: 0,
totalSkipped: 0,
publishableContentIds: [],
publishablePageIds: [],
};
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
// Initialize GUID logger for this push operation
(0, state_1.initializeGuidLogger)(sourceGuid, "push");
return [4 /*yield*/, this.executePushersInOrder(sourceGuid, targetGuid)];
case 2:
pushResults = _a.sent();
// Consolidate results
results.totalSuccess = pushResults.totalSuccess;
results.totalFailures = pushResults.totalFailures;
results.totalSkipped = pushResults.totalSkipped;
results.publishableContentIds = pushResults.publishableContentIds;
results.publishablePageIds = pushResults.publishablePageIds;
// Calculate final duration
results.totalDuration = Date.now() - startTime;
// Finalize the GUID logger (this creates the log file with source and target GUIDs)
try {
logFilePath = (0, state_1.finalizeGuidLogger)(sourceGuid);
if (logFilePath) {
results.logFilePath = logFilePath;
}
}
catch (logError) {
console.error("".concat(sourceGuid, "\u2192").concat(targetGuid, ": Could not finalize log file - ").concat(logError.message));
}
duration = Math.floor(results.totalDuration / 1000);
console.log("".concat(sourceGuid, "\u2192").concat(targetGuid, ": Completed in ").concat(duration, "s"));
return [2 /*return*/, results];
case 3:
error_1 = _a.sent();
results.failed.push({ operation: "guid-orchestration", error: error_1.message });
results.totalDuration = Date.now() - startTime;
console.error("".concat(sourceGuid, "\u2192").concat(targetGuid, ": Failed - ").concat(error_1.message));
// Try to finalize log file even on error
try {
logFilePath = (0, state_1.finalizeGuidLogger)(sourceGuid);
if (logFilePath) {
results.logFilePath = logFilePath;
}
}
catch (logError) {
console.error("".concat(sourceGuid, "\u2192").concat(targetGuid, ": Could not finalize log file - ").concat(logError.message));
}
return [2 /*return*/, results];
case 4: return [2 /*return*/];
}
});
});
};
/**
* Orchestrate push operations (MAIN METHOD)
*/
Pushers.prototype.instanceOrchestrator = function () {
return __awaiter(this, void 0, void 0, function () {
var _a, sourceGuids, targetGuids, sourceGuid, targetGuid, result;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = (0, state_1.getState)(), sourceGuids = _a.sourceGuid, targetGuids = _a.targetGuid;
if (sourceGuids.length === 0 || targetGuids.length === 0) {
throw new Error("No source or target GUIDs available for push operation");
}
sourceGuid = sourceGuids[0];
targetGuid = targetGuids[0];
console.log("--------------------------------");
return [4 /*yield*/, this.guidPusher(sourceGuid, targetGuid)];
case 1:
result = _b.sent();
return [2 /*return*/, [result]];
}
});
});
};
/**
* Execute pushers in dependency order - moved from sync.ts
*/
Pushers.prototype.executePushersInOrder = function (sourceGuid, targetGuid) {
return __awaiter(this, void 0, void 0, function () {
var locales, stateElements, elements, totalSuccess, totalFailures, totalSkipped, publishableContentIds, publishablePageIds, pusherConfig, filterOptions, sourceDataLoader, targetDataLoader, sourceData, targetData, _i, pusherConfig_1, config, error_2, _a, pusherConfig_2, config, _b, locales_1, locale, sourceData, targetData, error_3;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
locales = state_2.state.locale, stateElements = state_2.state.elements;
elements = stateElements.split(",");
totalSuccess = 0;
totalFailures = 0;
totalSkipped = 0;
publishableContentIds = [];
publishablePageIds = [];
pusherConfig = [
push_operations_config_1.PUSH_OPERATIONS.galleries,
push_operations_config_1.PUSH_OPERATIONS.assets,
push_operations_config_1.PUSH_OPERATIONS.models,
push_operations_config_1.PUSH_OPERATIONS.containers,
push_operations_config_1.PUSH_OPERATIONS.content,
push_operations_config_1.PUSH_OPERATIONS.templates,
push_operations_config_1.PUSH_OPERATIONS.pages,
];
filterOptions = {};
if (state_2.state.models && state_2.state.models.trim().length > 0) {
filterOptions.models = state_2.state.models.split(",").map(function (m) { return m.trim(); });
}
if (state_2.state.modelsWithDeps && state_2.state.modelsWithDeps.trim().length > 0) {
filterOptions.modelsWithDeps = state_2.state.modelsWithDeps.split(",").map(function (m) { return m.trim(); });
}
sourceDataLoader = new guid_data_loader_1.GuidDataLoader(sourceGuid);
targetDataLoader = new guid_data_loader_1.GuidDataLoader(targetGuid);
_c.label = 1;
case 1:
_c.trys.push([1, 8, , 9]);
return [4 /*yield*/, sourceDataLoader.loadGuidEntities(locales[0], Object.keys(filterOptions).length > 0 ? filterOptions : undefined)];
case 2:
sourceData = _c.sent();
return [4 /*yield*/, targetDataLoader.loadGuidEntities(locales[0])];
case 3:
targetData = _c.sent();
_i = 0, pusherConfig_1 = pusherConfig;
_c.label = 4;
case 4:
if (!(_i < pusherConfig_1.length)) return [3 /*break*/, 7];
config = pusherConfig_1[_i];
if (config === push_operations_config_1.PUSH_OPERATIONS.pages || config === push_operations_config_1.PUSH_OPERATIONS.content)
return [3 /*break*/, 6];
// Execute guid level op
return [4 /*yield*/, this.executePushOperation({
config: config,
sourceData: sourceData,
targetData: targetData,
locale: locales[0],
totalSuccess: totalSuccess,
totalFailures: totalFailures,
totalSkipped: totalSkipped,
publishableContentIds: publishableContentIds,
publishablePageIds: publishablePageIds,
elements: elements,
})];
case 5:
// Execute guid level op
_c.sent();
_c.label = 6;
case 6:
_i++;
return [3 /*break*/, 4];
case 7: return [3 /*break*/, 9];
case 8:
error_2 = _c.sent();
return [3 /*break*/, 9];
case 9:
_c.trys.push([9, 18, , 19]);
_a = 0, pusherConfig_2 = pusherConfig;
_c.label = 10;
case 10:
if (!(_a < pusherConfig_2.length)) return [3 /*break*/, 17];
config = pusherConfig_2[_a];
if (config !== push_operations_config_1.PUSH_OPERATIONS.pages && config !== push_operations_config_1.PUSH_OPERATIONS.content)
return [3 /*break*/, 16];
_b = 0, locales_1 = locales;
_c.label = 11;
case 11:
if (!(_b < locales_1.length)) return [3 /*break*/, 16];
locale = locales_1[_b];
return [4 /*yield*/, sourceDataLoader.loadGuidEntities(locale, Object.keys(filterOptions).length > 0 ? filterOptions : undefined)];
case 12:
sourceData = _c.sent();
return [4 /*yield*/, targetDataLoader.loadGuidEntities(locale)];
case 13:
targetData = _c.sent();
return [4 /*yield*/, this.executePushOperation({
config: config,
sourceData: sourceData,
targetData: targetData,
locale: locale,
totalSuccess: totalSuccess,
totalFailures: totalFailures,
totalSkipped: totalSkipped,
publishableContentIds: publishableContentIds,
publishablePageIds: publishablePageIds,
elements: elements,
})];
case 14:
_c.sent();
_c.label = 15;
case 15:
_b++;
return [3 /*break*/, 11];
case 16:
_a++;
return [3 /*break*/, 10];
case 17: return [2 /*return*/, {
totalSuccess: totalSuccess,
totalFailures: totalFailures,
totalSkipped: totalSkipped,
publishableContentIds: publishableContentIds,
publishablePageIds: publishablePageIds,
}];
case 18:
error_3 = _c.sent();
console.error(ansi_colors_1.default.red("Error during pusher execution:"), error_3);
throw error_3;
case 19: return [2 /*return*/];
}
});
});
};
Pushers.prototype.executePushOperation = function (_a) {
return __awaiter(this, arguments, void 0, function (_b) {
var elementData, pusherResult, successfulColor, failedColor, skippedColor;
var _c, _d, _e, _f;
var config = _b.config, sourceData = _b.sourceData, targetData = _b.targetData, locale = _b.locale, totalSuccess = _b.totalSuccess, totalFailures = _b.totalFailures, totalSkipped = _b.totalSkipped, publishableContentIds = _b.publishableContentIds, publishablePageIds = _b.publishablePageIds, elements = _b.elements;
return __generator(this, function (_g) {
switch (_g.label) {
case 0:
elementData = sourceData[config.dataKey] || [];
// Skip if no data for this element type or element not requested
if ((Array.isArray(elementData) && elementData.length === 0) ||
!elements.some(function (element) { return config.elements.includes(element); })) {
console.log(ansi_colors_1.default.gray("Skipping ".concat(config.description, " - no data or not requested")));
return [2 /*return*/];
}
(_d = (_c = this.config).onOperationStart) === null || _d === void 0 ? void 0 : _d.call(_c, config.name, state_2.state.sourceGuid[0], state_2.state.targetGuid[0]);
return [4 /*yield*/, config.handler(sourceData, targetData, locale)];
case 1:
pusherResult = _g.sent();
// Accumulate results using standardized pattern
totalSuccess += pusherResult.successful || 0;
totalSkipped += pusherResult.skipped || 0;
totalFailures += pusherResult.failed || 0;
// Collect publishable IDs for auto-publishing
if (pusherResult.publishableIds && pusherResult.publishableIds.length > 0) {
if (config.elements.includes("Content")) {
publishableContentIds.push.apply(publishableContentIds, pusherResult.publishableIds);
}
else if (config.elements.includes("Pages")) {
publishablePageIds.push.apply(publishablePageIds, pusherResult.publishableIds);
}
}
successfulColor = pusherResult.successful > 0 ? ansi_colors_1.default.green : ansi_colors_1.default.gray;
failedColor = pusherResult.failed > 0 ? ansi_colors_1.default.red : ansi_colors_1.default.gray;
skippedColor = pusherResult.skipped > 0 ? ansi_colors_1.default.yellow : ansi_colors_1.default.gray;
console.log(ansi_colors_1.default.gray("\n".concat(config.description, ": ")) +
successfulColor("".concat(pusherResult.successful, " successful, ")) +
skippedColor("".concat(pusherResult.skipped, " skipped, ")) +
failedColor("".concat(pusherResult.failed, " failed\n")));
(_f = (_e = this.config).onOperationComplete) === null || _f === void 0 ? void 0 : _f.call(_e, config.name, state_2.state.sourceGuid[0], state_2.state.targetGuid[0], pusherResult.status === "success");
return [2 /*return*/];
}
});
});
};
/**
* Get push summary
*/
Pushers.prototype.getPushSummary = function () {
return {
totalOperations: 0, // This would need to be tracked if needed
successfulOperations: 0,
failedOperations: 0,
overallSuccess: true,
duration: Date.now() - this.startTime.getTime(),
};
};
/**
* Reset orchestrator state
*/
Pushers.prototype.reset = function () {
this.startTime = new Date();
};
/**
* Update configuration
*/
Pushers.prototype.updateConfig = function (config) {
this.config = __assign(__assign({}, this.config), config);
};
return Pushers;
}());
exports.Pushers = Pushers;
//# sourceMappingURL=orchestrate-pushers.js.map