node-jose-browserify
Version:
An advanced version of Cisco's node-jose module that works in both browser and the server.
65 lines (56 loc) • 1.45 kB
JavaScript
/*!
* util/utf8.js - Implementation of UTF-8 Encoder/Decoder
*
* Copyright (c) 2015 Cisco Systems, Inc. See LICENSE file.
*/
;
var lodash = require("lodash");
var partialRight = lodash.partialRight;
var merge = lodash.merge;
var typedArrayCtors = (function() {
var ctors = [];
if ("undefined" !== typeof Uint8ClampedArray) {
ctors.push(Uint8ClampedArray);
}
if ("undefined" !== typeof Uint8Array) {
ctors.push(Uint8Array);
}
if ("undefined" !== typeof Uint16Array) {
ctors.push(Uint16Array);
}
if ("undefined" !== typeof Uint32Array) {
ctors.push(Uint32Array);
}
if ("undefined" !== typeof Float32Array) {
ctors.push(Float32Array);
}
if ("undefined" !== typeof Float64Array) {
ctors.push(Float64Array);
}
return ctors;
})();
function findTypedArrayFor(ta) {
var ctor;
for (var idx = 0; !ctor && typedArrayCtors.length > idx; idx++) {
if (ta instanceof typedArrayCtors[idx]) {
ctor = typedArrayCtors[idx];
}
}
return ctor;
}
function mergeBuffer(a, b) {
// TODO: should this be a copy, or the reference itself?
if (Buffer.isBuffer(b)) {
b = Buffer.from(b);
} else {
var Ctor = findTypedArrayFor(b);
b = Ctor ?
new Ctor(b, b.byteOffset, b.byteLength) :
undefined;
}
// TODO: QUESTION: create a merged <whatever-a-is>??
// for now, a is b
a = b;
return b;
}
module.exports = partialRight(merge, mergeBuffer);