Outlook_Addin_LLM/node_modules/find-process/lib/utils.js

168 lines
3.2 KiB
JavaScript
Raw Permalink Normal View History

/*
* @Author: zoujie.wzj
* @Date: 2016-01-23 18:17:55
* @Last Modified by: Sahel LUCAS--SAOUDI
* @Last Modified on: 2021-11-12
*/
'use strict'
const cp = require('child_process')
const UNIT_MB = 1024 * 1024
const utils = {
/**
* exec command with maxBuffer size
*/
exec (cmd, callback) {
cp.exec(cmd, {
maxBuffer: 2 * UNIT_MB,
windowsHide: true
}, callback)
},
/**
* spawn command
*/
spawn (cmd, args, options) {
return cp.spawn(cmd, args, options)
},
/**
* Strip top lines of text
*
* @param {String} text
* @param {Number} num
* @return {String}
*/
stripLine (text, num) {
let idx = 0
while (num-- > 0) {
const nIdx = text.indexOf('\n', idx)
if (nIdx >= 0) {
idx = nIdx + 1
}
}
return idx > 0 ? text.substring(idx) : text
},
/**
* Split string and stop at max parts
*
* @param {Number} line
* @param {Number} max
* @return {Array}
*/
split (line, max) {
const cols = line.trim().split(/\s+/)
if (cols.length > max) {
cols[max - 1] = cols.slice(max - 1).join(' ')
}
return cols
},
/**
* Extract columns from table text
*
* Example:
*
* ```
* extractColumns(text, [0, 2], 3)
* ```
*
* From:
* ```
* foo bar bar2
* valx valy valz
* ```
*
* To:
* ```
* [ ['foo', 'bar2'], ['valx', 'valz'] ]
* ```
*
* @param {String} text raw table text
* @param {Array} idxes the column index list to extract
* @param {Number} max max column number of table
* @return {Array}
*/
extractColumns (text, idxes, max) {
const lines = text.split(/(\r\n|\n|\r)/)
const columns = []
if (!max) {
max = Math.max.apply(null, idxes) + 1
}
lines.forEach(line => {
const cols = utils.split(line, max)
const column = []
idxes.forEach(idx => {
column.push(cols[idx] || '')
})
columns.push(column)
})
return columns
},
/**
* parse table text to array
*
* From:
* ```
* Header1 : foo
* Header2 : bar
* Header3 : val
*
* Header1 : foo2
* Header2 : bar2
* Header3 : val2
* ```
*
* To:
* ```
* [{ Header1: 'foo', Header2: 'bar', Header3: 'val' }, ...]
* ```
*
* @param {String} data raw table data
* @return {Array}
*/
parseTable (data) {
const lines = data.split(/(\r\n\r\n|\r\n\n|\n\r\n)|\n\n/).filter(line => {
return line.trim().length > 0
}).map((e) => e.split(/(\r\n|\n|\r)/).filter(line => line.trim().length > 0))
// Join multi-ligne value
lines.forEach((line) => {
for (let index = 0; line[index];) {
const entry = line[index]
if (entry.startsWith(' ')) {
line[index - 1] += entry.trimLeft()
line.splice(index, 1)
} else {
index += 1
}
}
})
return lines.map(line => {
const row = {}
line.forEach((string) => {
const splitterIndex = string.indexOf(':')
const key = string.slice(0, splitterIndex).trim()
row[key] = string.slice(splitterIndex + 1).trim()
})
return row
})
}
}
module.exports = utils