-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.js
More file actions
103 lines (87 loc) · 3.18 KB
/
Copy pathutils.js
File metadata and controls
103 lines (87 loc) · 3.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
const YAML = require('yaml');
const fs = require('fs');
const governify = require('./index');
var requireFromString = require('require-from-string');
const package = JSON.parse(fs.readFileSync(__dirname + '/package.json'));
module.exports = {
loadObjectFromFileOrURL: loadObjectFromFileOrURL,
unfoldObject: unfoldObject,
getTextBetween: getTextBetween,
requireFromString: requireFromString,
requireFromFileOrURL: requireFromFileOrURL,
sleepPromise: sleepPromise,
getServiceName: getServiceName
}
function getServiceName(){
return package.name
}
async function sleepPromise(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function requireFromFileOrURL(fileOrUrl) {
let src = await loadObjectFromFileOrURL(fileOrUrl);
return requireFromString(src);
}
//TODO: new methods to read only the content without parse as a object (for js and other files)
async function loadObjectFromFileOrURL(fileOrURL) {
try {
let result;
if (fileOrURL.startsWith('http://') || fileOrURL.startsWith('https://')) {
let requestFile = await governify.httpClient.get(fileOrURL);
result = requestFile.data;
} else
result = await fs.readFileSync(fileOrURL, 'utf8');
if (fileOrURL.endsWith('.yaml') || fileOrURL.endsWith('.yml'))
result = YAML.parse(result);
return result;
} catch (error) {
throw Error('Error requesting file from: ' + fileOrURL + ' ERROR: ' + error)
}
}
// function getPropertyFromString(object, property) {
// let propertyResult = property.split('.').reduce(function (p, prop) { return p[prop] }, object);
// return propertyResult.default ? propertyResult.default : propertyResult;
// }
// function setPropertyFromString(object, property) {
// let propertyResult = property.split('.').reduce(function (p, prop) { return p[prop] }, object);
// return propertyResult.default ? propertyResult.default : propertyResult;
// }
function getTextBetween(text, betweenStart, betweenEnd) {
let init = text.indexOf(betweenStart);
let end = text.indexOf(betweenEnd);
if (init != -1 && end != -1 && init < end) {
return text.substr(init + 1, end - init - 1);
} else {
return null;
}
}
//Unfold a object to only 1 level variables
function unfoldObject(input) {
function flatten(obj) {
var result = {},
f,
key,
keyf;
for (key in obj) {
if (obj[key] instanceof Array) {
obj[key].forEach(function (k) {
f = flatten(k);
for (keyf in f) {
result[key + '.' + keyf] = f[keyf];
}
output.push(JSON.parse(JSON.stringify(result))); //poor man's clone object
});
} else if (obj[key] instanceof Object) {
f = flatten(obj[key]);
for (keyf in f) {
result[key + '_' + keyf] = f[keyf];
}
} else {
result[key] = obj[key];
}
}
return result;
} //flatten
var output = [];
return flatten(input);
} //unfold