@nova-odm/auto-marshaller
Version:
A data marshaller that converts JavaScript types into Amazon DynamoDB AttributeValues
78 lines (77 loc) • 2.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BinarySet = void 0;
var tslib_1 = require("tslib");
var ObjectSet_1 = require("./ObjectSet");
/**
* A set of binary values represented as either ArrayBuffer objects or
* ArrayBufferView objects. Equality is determined by the underlying byte
* sequence and not by the identity or view window type of the provided value.
*/
var BinarySet = /** @class */ (function (_super) {
tslib_1.__extends(BinarySet, _super);
function BinarySet() {
return _super !== null && _super.apply(this, arguments) || this;
}
BinarySet.prototype.delete = function (value) {
var valueView = getBinaryView(value);
var scrubbedValues = this._values.filter(function (item) {
return !binaryEquals(getBinaryView(item), valueView);
});
var numRemoved = this._values.length - scrubbedValues.length;
this._values = scrubbedValues;
return numRemoved > 0;
};
/**
* @inheritDoc
*
* Equality is determined by inspecting the bytes of the ArrayBuffer or
* ArrayBufferView.
*
* @example On a little-endian system, the following values would be
* considered equal:
*
* new Uint32Array([0xdeadbeef]);
* (new Uint32Array([0xdeadbeef])).buffer;
* new Uint16Array([0xbeef, 0xdead]);
* new Uint8Array([0xef, 0xbe, 0xad, 0xde]);
*/
BinarySet.prototype.has = function (value) {
var e_1, _a;
var valueView = getBinaryView(value);
try {
for (var _b = tslib_1.__values(this), _c = _b.next(); !_c.done; _c = _b.next()) {
var item = _c.value;
if (binaryEquals(getBinaryView(item), valueView)) {
return true;
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
return false;
};
return BinarySet;
}(ObjectSet_1.ObjectSet));
exports.BinarySet = BinarySet;
function binaryEquals(a, b) {
if (a.byteLength !== b.byteLength) {
return false;
}
for (var i = 0; i < a.byteLength; i++) {
if (a.getUint8(i) !== b.getUint8(i)) {
return false;
}
}
return true;
}
function getBinaryView(value) {
return ArrayBuffer.isView(value)
? new DataView(value.buffer, value.byteOffset, value.byteLength)
: new DataView(value);
}