@wbg-mde/repository
Version:
Managing all common method for file system CRUD operations.
295 lines (294 loc) • 13.2 kB
JavaScript
;
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;
};
Object.defineProperty(exports, "__esModule", { value: true });
const app_repo_utility_1 = require("../shared/app.repo.utility");
const app_repo_constants_1 = require("../shared/app.repo.constants");
const template_1 = require("../master-data/template");
const project_header_1 = require("../project-data/project.header");
const project_configuration_1 = require("../configuration/project.configuration");
const resource_path_1 = require("../resource-path/resource-path");
const path = require("path");
const fs = require("fs");
const mkdirp = require("mkdirp");
const trace_decorator_1 = require("../decorators/trace.decorator");
let I18nCore = class I18nCore {
constructor() {
this.resources = {};
this.resInfoFile = "resourceinfo.json";
this.template = new template_1.Template();
this.projectHeader = new project_header_1.ProjectHeader();
this.resourcePath = new resource_path_1.ResourcePath();
}
geti18nResource(language, callback) {
let resourcePath = this.geti18nResourcePath(language, true);
let resource = fs.readFile(resourcePath, 'utf8', (err, data) => {
if (err) {
callback({
result: 'error',
messages: err
});
return;
}
data = JSON.parse(data.trim());
callback({
result: 'ok',
resource: data
});
});
}
geti18nResourcePath(language, includeFileName) {
return this.resourcePath.getI18nResourcePath(language, includeFileName);
}
getAllI8nResources(keysOnly) {
let resources = app_repo_utility_1.App_Repository_Utility.getAlli18nResources();
let languages;
if (resources && keysOnly === true) {
languages = Object.keys(resources);
}
else {
languages = resources;
}
return languages;
}
updateResourceFile(language, data, callback) {
let resourcePath = this.geti18nResourcePath(language, true);
this.writeFile(resourcePath, data).then((resp) => {
callback(resp);
}).catch((resp) => {
callback(resp);
});
}
addNewResource(langMetadata) {
return new Promise((resolve, reject) => {
let isoCode = langMetadata.isoCode;
this.createResourceFile(isoCode).then(() => {
this.updateConfigFile(langMetadata, 1);
resolve();
}).catch((reason) => {
reject(reason);
});
this.createSectionMappingFiles(isoCode);
this.createResourceTemplateFiles(isoCode);
});
}
createResourceFile(isoCode) {
return new Promise((resolve, reject) => {
this.geti18nResource(app_repo_constants_1.App_Repository_Constants.defaultLanguage, (response) => {
if (response.result !== "ok") {
reject(response.messages);
return;
}
let directoryPath = this.geti18nResourcePath(isoCode, false);
this.createDirectory(directoryPath).then(() => {
this.updateResourceFile(isoCode, response.resource, (res) => {
if (response.result !== "ok") {
reject(response.messages);
return;
}
resolve(res.data);
});
}).catch((reason) => {
reject(reason.messages);
});
});
});
}
createSectionMappingFiles(isoCode) {
try {
let dirPath = this.getSectionMappingPath(isoCode, app_repo_constants_1.App_Repository_Constants.appSectionMappingTypes.editor, false);
this.createDirectory(dirPath).then(() => {
this.template.getEditorSectionMappingSchema(app_repo_constants_1.App_Repository_Constants.schemaTypes.ddi, app_repo_constants_1.App_Repository_Constants.defaultLanguage, (resp) => {
if (resp.result !== "ok") {
return;
}
let filePath = this.getSectionMappingPath(isoCode, app_repo_constants_1.App_Repository_Constants.appSectionMappingTypes.editor, true);
this.writeFile(filePath, resp.schema);
});
});
let dirTmPath = this.getSectionMappingPath(isoCode, app_repo_constants_1.App_Repository_Constants.appSectionMappingTypes.template, false);
this.createDirectory(dirTmPath).then(() => {
this.template.getTemplateSectionMappingSchema(app_repo_constants_1.App_Repository_Constants.schemaTypes.ddi, app_repo_constants_1.App_Repository_Constants.defaultLanguage, (resp) => {
if (resp.result !== "ok") {
return;
}
let filePath = this.getSectionMappingPath(isoCode, app_repo_constants_1.App_Repository_Constants.appSectionMappingTypes.template, true);
this.writeFile(filePath, resp.schema);
});
});
}
catch (ex) {
return true;
}
}
createResourceTemplateFiles(isoCode) {
try {
let dirPath = this.getResourceTemplatePath(isoCode, app_repo_constants_1.App_Repository_Constants.appTemplateTypes.base);
this.createDirectory(dirPath).then(() => {
this.copyAndRenameTemplates(dirPath, isoCode, app_repo_constants_1.App_Repository_Constants.appTemplateTypes.base);
});
let dirPathDef = this.getResourceTemplatePath(isoCode, app_repo_constants_1.App_Repository_Constants.appTemplateTypes.default);
this.createDirectory(dirPathDef).then(() => {
this.copyAndRenameTemplates(dirPathDef, isoCode, app_repo_constants_1.App_Repository_Constants.appTemplateTypes.default);
});
}
catch (ex) {
return true;
}
}
copyAndRenameTemplates(toPath, isoCode, templateType) {
return new Promise((resolve, reject) => {
let fromPath = this.getResourceTemplatePath(app_repo_constants_1.App_Repository_Constants.defaultLanguage, templateType);
let from;
let to;
fs.readdir(fromPath, (err, files) => {
if (err) {
reject(err);
return;
}
for (let i = 0; i < files.length; i++) {
from = path.join(fromPath, files[i]);
to = path.join(toPath, files[i]);
let tmpTo = to.split("_");
tmpTo.splice(tmpTo.length - 1, 1);
to = app_repo_utility_1.App_Repository_Utility.formatFileNameByLanguage(tmpTo.join("_"), isoCode);
let data = fs.readFileSync(from, 'utf8');
data = JSON.parse(data.trim());
fs.writeFileSync(to, JSON.stringify(data), { encoding: "utf8" });
}
resolve();
});
});
}
updateConfigFile(langMetadata, action) {
if (action === 1) {
let resource = {};
resource[langMetadata.isoCode] = langMetadata.name;
project_configuration_1.configuaration.i18nResources = Object.assign(project_configuration_1.configuaration.i18nResources, resource);
project_configuration_1.configuaration.refresh();
}
else if (action === 2) {
let resources = project_configuration_1.configuaration.i18nResources;
delete resources[langMetadata.isoCode];
project_configuration_1.configuaration.i18nResources = resources;
project_configuration_1.configuaration.refresh();
}
}
createDirectory(directoryPath) {
return new Promise((resolve, reject) => {
mkdirp(directoryPath, (err) => {
if (err) {
reject({ result: 'error', messages: err });
}
else {
resolve();
}
});
});
}
createDirectorySync(directoryPath) {
mkdirp.sync(directoryPath);
}
writeFile(resourcePath, data) {
if (typeof data === "object") {
data = JSON.stringify(data);
}
return new Promise((resolve, reject) => {
fs.writeFile(resourcePath, data, { encoding: 'utf8' }, (err) => {
if (err) {
reject({ result: 'error', messages: err });
}
else {
resolve({ result: 'ok', data: data });
}
});
});
}
getSectionMappingPath(isoCode, sectionType, setExtension) {
return this.resourcePath.getSectionMappingPath(app_repo_constants_1.App_Repository_Constants.schemaTypes.ddi, isoCode, sectionType, setExtension);
}
getResourceTemplatePath(isoCode, templateType) {
return this.resourcePath.getStudyTemplatePath(app_repo_constants_1.App_Repository_Constants.schemaTypes.ddi, isoCode, templateType);
}
getCustomTemplatePath(isoCode) {
return this.resourcePath.getCustomTemplatePath(isoCode);
}
updateResource(langMetadata) {
return new Promise((resolve, reject) => {
this.updateConfigFile(langMetadata, 1);
resolve();
});
}
deleteResource(isoCode) {
return new Promise((resolve, reject) => {
this.removeResourceDirectory(isoCode).then(() => {
this.updateConfigFile({ isoCode: isoCode, name: "" }, 2);
resolve();
});
this.removeSectionMappingDirectory(isoCode);
this.removeTemplateDirectory(isoCode);
this.removeCustomTemplates(isoCode);
this.removeCustomTemplateDirectory(isoCode);
});
}
removeResourceDirectory(isoCode) {
return new Promise((resolve, reject) => {
let directoryPath = this.geti18nResourcePath(isoCode, false);
this.removeDirectory(directoryPath);
resolve();
});
}
removeSectionMappingDirectory(isoCode) {
let dirPath = this.getSectionMappingPath(isoCode, app_repo_constants_1.App_Repository_Constants.appSectionMappingTypes.editor, false);
this.removeDirectory(dirPath);
let dirTmPath = this.getSectionMappingPath(isoCode, app_repo_constants_1.App_Repository_Constants.appSectionMappingTypes.template, false);
this.removeDirectory(dirTmPath);
}
removeTemplateDirectory(isoCode) {
let dirPath = this.getResourceTemplatePath(isoCode, app_repo_constants_1.App_Repository_Constants.appTemplateTypes.base);
this.removeDirectory(dirPath);
let dirPathDef = this.getResourceTemplatePath(isoCode, app_repo_constants_1.App_Repository_Constants.appTemplateTypes.default);
this.removeDirectory(dirPathDef);
}
removeCustomTemplates(isoCode) {
this.template.deleteTemplateByLanguage(isoCode, (response) => {
});
}
removeCustomTemplateDirectory(isoCode) {
let dirPath = this.getCustomTemplatePath(isoCode);
this.removeDirectory(dirPath);
}
removeDirectory(fPath) {
if (fs.existsSync(fPath)) {
fs.readdirSync(fPath).forEach((file, index) => {
let curPath = path.join(fPath, file);
if (fs.lstatSync(curPath).isDirectory()) {
this.removeDirectory(curPath);
}
else {
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(fPath);
}
}
getProjectsByLanguage(isoCode) {
return new Promise((resolve, reject) => {
this.projectHeader.getAllProjects({ language: isoCode }, (response) => {
if (response.result !== 'ok') {
reject(response);
return;
}
resolve(response.data);
});
});
}
};
I18nCore = __decorate([
trace_decorator_1.Trace()
], I18nCore);
exports.I18nCore = I18nCore;