@crowdin/app-project-module
Version:
Module that generates for you all common endpoints for serving standalone Crowdin App
94 lines (93 loc) • 5.38 kB
JavaScript
;
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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createOrUpdateFileSnapshot = exports.getIntegrationSnapshot = exports.getCrowdinSnapshot = void 0;
const types_1 = require("../types");
const storage_1 = require("../../../storage");
const defaults_1 = require("./defaults");
const files_1 = require("./files");
function getCrowdinSnapshot(config, integration, crowdinApiClient, projectId, integrationSettings) {
return __awaiter(this, void 0, void 0, function* () {
let files = [];
if (integration.getCrowdinFiles) {
const rootFolder = yield (0, defaults_1.getRootFolder)(config, integration, crowdinApiClient, projectId);
files = yield integration.getCrowdinFiles(projectId, crowdinApiClient, rootFolder, integrationSettings);
}
return files;
});
}
exports.getCrowdinSnapshot = getCrowdinSnapshot;
function getTreeItems(integrationData) {
let files = [];
if ((0, files_1.isExtendedResultType)(integrationData)) {
files = integrationData.data;
}
else {
files = integrationData;
}
return files;
}
function getOneLevelFetchingFiles(integration, integrationCredentials, integrationSettings, parentFiles) {
return __awaiter(this, void 0, void 0, function* () {
for (const file of parentFiles) {
if (!file.type) {
let childs = yield integration.getIntegrationFiles(integrationCredentials, integrationSettings, file.id, '', 0);
childs = getTreeItems(childs);
if (childs.length > 0) {
const childFiles = yield getOneLevelFetchingFiles(integration, integrationCredentials, integrationSettings, childs);
parentFiles = [...parentFiles, ...childFiles];
}
}
}
return parentFiles;
});
}
function getIntegrationSnapshot(integration, integrationCredentials, integrationSettings) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
let files = [];
let integrationData = [];
integrationData = yield integration.getIntegrationFiles(integrationCredentials, integrationSettings, '', '', 0);
files = getTreeItems(integrationData);
if (integration.integrationOneLevelFetching) {
files = yield getOneLevelFetchingFiles(integration, integrationCredentials, integrationSettings, files);
}
if ((integrationSettings === null || integrationSettings === void 0 ? void 0 : integrationSettings.skipIntegrationNodesToggle) === true ||
((integrationSettings === null || integrationSettings === void 0 ? void 0 : integrationSettings.skipIntegrationNodesToggle) === null && ((_a = integration.skipIntegrationNodesToggle) === null || _a === void 0 ? void 0 : _a.value))) {
files = (0, files_1.skipFilesByRegex)(files, integration.skipIntegrationNodes);
}
// trick for compatibility in requests and set files
files = files.map((file) => (Object.assign(Object.assign({}, file), { parentId: file.parent_id || file.parentId, parent_id: file.parent_id || file.parentId, node_type: file.nodeType || file.node_type })));
return files;
});
}
exports.getIntegrationSnapshot = getIntegrationSnapshot;
function createOrUpdateFileSnapshot(config, integration, req, provider) {
return __awaiter(this, void 0, void 0, function* () {
let files = [];
const existingSnapshot = yield (0, storage_1.getStorage)().getFilesSnapshot(req.crowdinContext.clientId, req.crowdinContext.crowdinId, provider);
if (provider === types_1.Provider.CROWDIN) {
files = yield getCrowdinSnapshot(config, integration, req.crowdinApiClient, req.crowdinContext.jwtPayload.context.project_id, req.integrationSettings);
}
if (provider === types_1.Provider.INTEGRATION) {
files = yield getIntegrationSnapshot(integration, req.integrationCredentials, req.integrationSettings);
}
if (existingSnapshot) {
req.logInfo(`Updating file snapshot for provider ${provider} ${JSON.stringify(files, null, 2)}`);
yield (0, storage_1.getStorage)().updateFilesSnapshot(JSON.stringify(files), req.crowdinContext.clientId, req.crowdinContext.crowdinId, provider);
}
else {
req.logInfo(`Saving file snapshot for provider ${provider} ${JSON.stringify(files, null, 2)}`);
yield (0, storage_1.getStorage)().saveFilesSnapshot(JSON.stringify(files), req.crowdinContext.clientId, req.crowdinContext.crowdinId, provider);
}
});
}
exports.createOrUpdateFileSnapshot = createOrUpdateFileSnapshot;