octonom
Version:
Object Document Mapper for any database
54 lines (52 loc) • 1.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const crypto_1 = require("crypto");
const lodash_1 = require("lodash");
const uuid_1 = require("uuid");
// TODO: fix this decorator
/*
export function enumerable(value: boolean): PropertyDecorator {
return (target: any, key: string) => {
const descriptor = Object.getOwnPropertyDescriptor(target, key) || {};
// writable is false by default, so we explicitly set it to true here
if (descriptor.writable === undefined) {
descriptor.writable = true;
}
if (descriptor.enumerable !== value) {
descriptor.enumerable = value;
Object.defineProperty(target, key, descriptor);
}
};
}
*/
function generateId() {
// alternative 1
// return base64url(uuid.v4(null, new Buffer(16)));
// alternative 2: random bytes in base64url
// const nbytes = 9; // requirement: (nbytes * 8) % 6 === 0
// return base64url(crypto.randomBytes(nbytes));
// alternative 3: base64url(shorten(hash(uuid)))
const nchars = 12; // 2**(nchars*6)
return crypto_1.createHash('sha1')
.update(uuid_1.v1()) // set uuid
.digest('base64') // get base64 hash
.slice(0, nchars) // shorten
.replace(/\+/g, '-').replace(/\//g, '_'); // URL-base64
}
exports.generateId = generateId;
function invertMap(map) {
const invertedMap = {};
lodash_1.forEach(map, (newKey, oldKey) => invertedMap[newKey] = oldKey);
return invertedMap;
}
exports.invertMap = invertMap;
function rename(obj, map) {
const newObj = {};
lodash_1.forEach(obj, (value, key) => {
const newKey = map[key] || key;
newObj[newKey] = value;
});
return newObj;
}
exports.rename = rename;
//# sourceMappingURL=utils.js.map