@wbg-mde/r-factory
Version:
Metadata editor R integration module
136 lines (135 loc) • 6.03 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 path = require("path");
const repository_1 = require("@wbg-mde/repository");
const _ = require('lodash');
let Utility = class Utility {
static getTempFilePath(projectId) {
return path.join(repository_1.resourcePath.getTempDirectory(), `${projectId}_${new Date().getTime()}.json`);
}
static getRScriptPath(scriptIndex) {
let RScripts = {
0: "convert.tsv.R",
1: "update.varStats.R",
2: "export.fwf.R",
3: "export.data.R",
4: "destring.variable.update.data.R",
5: "write.csv.R",
6: "import.data.R",
7: "environment.details.R",
8: "resequence.data.R",
9: "stringlen.variable.R",
10: "create.categories.R",
11: "basekey.validation.R",
12: "variable.repoStats.R",
13: "update.pkgs.R"
};
return repository_1.resourcePath.getRScriptPath(RScripts[scriptIndex]);
}
static formatRObject(obj) {
for (let prop in obj) {
if (Object.prototype.toString.apply(obj[prop]) == '[object Object]') {
this.removeEmptyValue(obj, prop);
}
else if (Object.prototype.toString.apply(obj[prop]) == '[object Array]') {
if (obj[prop].length === 1 && Object.prototype.toString.apply(obj[prop][0]) != '[object Object]') {
obj[prop] = obj[prop][0];
if (Object.prototype.toString.apply(obj[prop]) == '[object Object]' || Object.prototype.toString.apply(obj[prop]) == '[object Array]') {
this.removeEmptyValue(obj, prop);
}
}
else {
this.removeEmptyValue(obj, prop);
}
}
}
return obj;
}
static removeEmptyValue(obj, prop) {
if (Object.keys(obj[prop]).length !== 0) {
this.formatRObject(obj[prop]);
}
else {
obj[prop] = null;
}
}
static formatVariable(variables, outProps) {
const formatDatum = function (fields) {
return function (obj) {
var datum = {};
fields.forEach(function (field) {
switch (field) {
case 'val':
{
let catgry = new Array();
if (obj.catgry) {
catgry = _.compact(_.map(obj.catgry, (category) => {
if (category && category.catValu != undefined && category.catValu !== 'NA') {
return {
catValu: [category.catValu],
labl: [category.labl]
};
}
}));
}
datum[field] = catgry;
}
break;
case 'catVal':
{
let catgry = new Array();
if (obj.catgry) {
catgry = _.compact(_.map(obj.catgry, (category) => {
if (category.catValu != undefined && category.catValu !== 'NA') {
return category.catValu;
}
}));
}
datum[field] = catgry;
}
break;
case 'internalName':
datum[field] = [obj.internalName || obj.name];
break;
case 'type':
datum[field] = [(obj.varFormat) ? obj.varFormat.type : "numeric"];
break;
case 'dataType':
datum[field] = [obj.varType];
break;
case 'width':
datum[field] = [(obj.location) ? obj.location.width : 0];
break;
case 'StartPos':
case 'EndPos':
datum[field] = [obj.location[field]];
break;
case 'StorageType':
case 'ReadFormat':
datum[field] = '';
break;
default:
datum[field] = [obj[field]];
break;
}
});
return datum;
};
};
return variables.map(formatDatum(outProps));
}
};
Utility = __decorate([
repository_1.Trace({
params: {
formatVariable: ['*']
}
})
], Utility);
exports.Utility = Utility;