octo-deno/lib/utils/common.js

88 lines
2.1 KiB
JavaScript
Raw Normal View History

2017-04-22 22:49:49 +00:00
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
2018-03-21 21:04:57 +00:00
const jsesc = require('jsesc')
2018-03-19 04:54:40 +00:00
const utils = require('../utils')
class common extends utils {
static objToString (obj) {
2017-04-22 22:49:49 +00:00
try {
return '' + obj
2017-04-22 22:49:49 +00:00
} catch (e) {
return '[' + e + ']'
2017-04-22 22:49:49 +00:00
}
}
static getAllProperties (obj) {
let list = []
2017-04-22 22:49:49 +00:00
while (obj) {
list = list.concat(Object.getOwnPropertyNames(obj))
obj = Object.getPrototypeOf(obj)
2017-04-22 22:49:49 +00:00
}
return list
}
static getKeysFromHash (obj) {
let list = []
2017-04-22 22:49:49 +00:00
for (let p in obj) {
list.push(p)
2017-04-22 22:49:49 +00:00
}
return list
}
static quote (s) {
2018-03-21 21:26:35 +00:00
return `'${jsesc(s)}'`
}
static b64encode (str) {
2017-06-08 16:05:06 +00:00
// Unicode safe b64 encoding
// https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_Unicode_Problem
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,
function toSolidBytes (match, p1) {
// noinspection JSCheckFunctionSignatures
return String.fromCharCode('0x' + p1)
}))
}
static b64decode (str) {
2017-06-08 16:05:06 +00:00
// Unicode safe b64 decoding
// https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_Unicode_Problem
return decodeURIComponent(atob(str).split('').map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)
}).join(''))
}
static uniqueList (list) {
let tmp = {}
let r = []
2017-04-22 22:49:49 +00:00
for (let i = 0; i < list.length; i++) {
tmp[list[i]] = list[i]
2017-04-22 22:49:49 +00:00
}
for (let i in tmp) {
r.push(tmp[i])
2017-04-22 22:49:49 +00:00
}
return r
}
static mergeHash (obj1, obj2) {
2017-04-22 22:49:49 +00:00
for (let p in obj2) {
try {
2017-04-25 15:22:15 +00:00
if (obj2[p].constructor === Object) {
obj1[p] = utils.common.mergeHash(obj1[p], obj2[p])
2017-04-22 22:49:49 +00:00
} else {
obj1[p] = obj2[p]
2017-04-22 22:49:49 +00:00
}
} catch (e) {
obj1[p] = obj2[p]
2017-04-22 22:49:49 +00:00
}
}
return obj1
}
static mockup (obj) {
return obj.split('\n').map((ln) => ln.trim()).join('')
}
}
module.exports = common