UNPKG

@wbg-mde/repository

Version:

Managing all common method for file system CRUD operations.

295 lines (294 loc) 13.2 kB
"use strict"; 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;