Skip to content

Instantly share code, notes, and snippets.

@thephucit
Last active January 14, 2019 05:08
Show Gist options
  • Select an option

  • Save thephucit/2e4127b3fd984552c837111f01d597e3 to your computer and use it in GitHub Desktop.

Select an option

Save thephucit/2e4127b3fd984552c837111f01d597e3 to your computer and use it in GitHub Desktop.
some helper function in nodejs
/**
* Get random item in array
*
* @param {Object} array
* @param {Number} n
*
* @return {Object}
*/
random(array: any, n: number) {
let result = new Array(n),
len = array.length,
taken = new Array(len);
if (n > len)
return array;
while (n--) {
let x = Math.floor(Math.random() * len);
result[n] = array[x in taken ? taken[x] : x];
taken[x] = --len in taken ? taken[len] : len;
}
return result;
}
/**
* access object property with variable
*
* @param {Any} obj
* @param {String} prop
*
* @return Any
*/
readProp(obj: any, prop: string) {
return obj[prop];
}
/**
* Get id from slug
*
* @param {string} slug
*
* @return {number}
*/
getId(slug: string) {
let arr: any = slug.split('-');
let id: any = arr.pop();
id = parseInt(id);
return !lo.isNaN(id) ? id : 0;
}
/**
* Round number
*
* @param {number} number
* @param {number} decimals
* @return {number}
*/
round(number: number, decimals = 2) {
return Number((number).toFixed(decimals));
}
/**
* Convert string to slug
*
* @param {String} slug
*
* @return {String}
*/
convertToSlug(slug: string) {
//Change to lower case
slug = slug.toLowerCase();
//Remove vietnamese
slug = slug.replace(/á|à|ả|ạ|ã|ă|ắ|ằ|ẳ|ẵ|ặ|â|ấ|ầ|ẩ|ẫ|ậ/gi, 'a');
slug = slug.replace(/é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ/gi, 'e');
slug = slug.replace(/i|í|ì|ỉ|ĩ|ị/gi, 'i');
slug = slug.replace(/ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ/gi, 'o');
slug = slug.replace(/ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự/gi, 'u');
slug = slug.replace(/ý|ỳ|ỷ|ỹ|ỵ/gi, 'y');
slug = slug.replace(/đ/gi, 'd');
//Remove special char
slug = slug.replace(/\`|\~|\!|\@|\#|\||\$|\%|\^|\&|\*|\(|\)|\+|\=|\,|\.|\/|\?|\>|\<|\'|\"|\:|\;|_/gi, '');
//Change space to '-'
slug = slug.replace(/ /gi, "-");
//Remove --
slug = slug.replace(/\-\-\-\-\-/gi, '-');
slug = slug.replace(/\-\-\-\-/gi, '-');
slug = slug.replace(/\-\-\-/gi, '-');
slug = slug.replace(/\-\-/gi, '-');
slug = '@' + slug + '@';
slug = slug.replace(/\@\-|\-\@|\@/gi, '');
return slug;
}
/**
* convert file to base64
*
* @param {string} file
* @param {buffer}
*/
async base64Encode(file: string) {
let fs = require('fs');
let bitmap = fs.readFileSync(file);
return await new Buffer(bitmap).toString('base64');
}
/**
* download file
*
* @param {string} url
*/
async downloadImage(url: string) {
const Fs = require('fs');
const Path = require('path');
const Axios = require('axios');
const path = Path.resolve(__dirname, '../../../assets/images/downloads/', Path.basename(url))
const writer = Fs.createWriteStream(path)
const response = await Axios({
url,
method: 'GET',
responseType: 'stream'
})
await response.data.pipe(writer)
return await new Promise((resolve, reject) => {
writer.on('finish', resolve)
writer.on('error', reject)
})
}
/**
* convert file to base64 from url
*
* @param {string} url
* @param {buffer}
*/
async urlBase64Encode(url: string) {
try {
let axios = require('axios');
let image = await axios.get(url, {responseType: 'arraybuffer'});
return Buffer.from(image.data).toString('base64');
} catch (ex) {
return false;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment