suitescript-mocks
Version:
Set of mocks for unit testing Netsuite Suitescript 2.*
92 lines (91 loc) • 10.7 kB
JavaScript
const {
Tuple
} = require("@bloomberg/record-tuple-polyfill");
// Set but with custom keying and iterable
class KeyedSet {
#map = new Map();
#indexes = new Map();
#key = value => {
/* eslint-disable */
return Tuple(...Array.from(this.#indexes.keys()).map(keyFunc => keyFunc(value)));
};
constructor(...keyFuncs) {
keyFuncs.forEach(keyFunc => {
this.#indexes.set(value => Tuple.from([keyFunc(value)].flat()), new Map());
});
return new Proxy(this, {
get(target, prop) {
if (prop in target) {
return target[prop];
} else if (!isNaN(prop)) {
const arr = [...target];
const index = Number(prop) < 0 ? arr.length - prop : prop;
return arr[index];
}
}
});
}
[Symbol.iterator] = () => {
return this.#map.values();
};
get length() {
return Array.from(this.#map.values()).length;
}
add = value => {
if (!this.has(value)) {
this.set(value);
}
return this;
};
set = value => {
for (const [keyFunc, index] of this.#indexes.entries()) {
index.set(keyFunc(value), value);
}
this.#map.set(this.#key(value), value);
return this;
};
clear = () => {
for (const index of this.#indexes.values()) {
index.clear();
}
this.#map.clear();
};
delete = value => {
let record;
for (const [keyFunc, index] of this.#indexes.entries()) {
record = record || index.get(keyFunc(value));
index.delete(keyFunc(value));
}
return this.#map.delete(this.#key(record));
};
entries = () => {
return this.#map.entries();
};
forEach = callback => {
Array.from(this.#map.values()).forEach((val, i, arr) => {
callback(val, i, arr);
});
};
get = value => {
if (this.#map.has(this.#key(value))) {
return this.#map.get(this.#key(value));
}
for (const [keyFunc, index] of this.#indexes.entries()) {
if (index.has(keyFunc(value))) {
return index.get(keyFunc(value));
}
}
return undefined;
};
has = value => {
return this.get(value) !== undefined;
};
keys = () => {
return this.#map.keys();
};
values = () => {
return this.#map.values();
};
}
module.exports = KeyedSet;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUdXBsZSIsInJlcXVpcmUiLCJLZXllZFNldCIsIm1hcCIsIk1hcCIsImluZGV4ZXMiLCJrZXkiLCJ2YWx1ZSIsIkFycmF5IiwiZnJvbSIsImtleXMiLCJrZXlGdW5jIiwiY29uc3RydWN0b3IiLCJrZXlGdW5jcyIsImZvckVhY2giLCJzZXQiLCJmbGF0IiwiUHJveHkiLCJnZXQiLCJ0YXJnZXQiLCJwcm9wIiwiaXNOYU4iLCJhcnIiLCJpbmRleCIsIk51bWJlciIsImxlbmd0aCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwidmFsdWVzIiwiYWRkIiwiaGFzIiwiZW50cmllcyIsImNsZWFyIiwiZGVsZXRlIiwicmVjb3JkIiwiY2FsbGJhY2siLCJ2YWwiLCJpIiwidW5kZWZpbmVkIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9rZXllZC1zZXQuY2pzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHsgVHVwbGUgfSA9IHJlcXVpcmUoXCJAYmxvb21iZXJnL3JlY29yZC10dXBsZS1wb2x5ZmlsbFwiKTtcblxuLy8gU2V0IGJ1dCB3aXRoIGN1c3RvbSBrZXlpbmcgYW5kIGl0ZXJhYmxlXG5jbGFzcyBLZXllZFNldCB7XG5cdCNtYXAgPSBuZXcgTWFwKCk7XG5cdCNpbmRleGVzID0gbmV3IE1hcCgpO1xuXHQja2V5ID0gKHZhbHVlKSA9PiB7XG5cdFx0LyogZXNsaW50LWRpc2FibGUgKi9cblx0XHRyZXR1cm4gVHVwbGUoLi4uQXJyYXkuZnJvbSh0aGlzLiNpbmRleGVzLmtleXMoKSkubWFwKChrZXlGdW5jKSA9PiBrZXlGdW5jKHZhbHVlKSkpO1xuXHR9O1xuXG5cdGNvbnN0cnVjdG9yKC4uLmtleUZ1bmNzKSB7XG5cdFx0a2V5RnVuY3MuZm9yRWFjaCgoa2V5RnVuYykgPT4ge1xuXHRcdFx0dGhpcy4jaW5kZXhlcy5zZXQoKHZhbHVlKSA9PiBUdXBsZS5mcm9tKFtrZXlGdW5jKHZhbHVlKV0uZmxhdCgpKSwgbmV3IE1hcCgpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gbmV3IFByb3h5KHRoaXMsIHtcblx0XHRcdGdldCh0YXJnZXQsIHByb3ApIHtcblx0XHRcdFx0aWYgKHByb3AgaW4gdGFyZ2V0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRhcmdldFtwcm9wXTtcblx0XHRcdFx0fSBlbHNlIGlmICghaXNOYU4ocHJvcCkpIHtcblx0XHRcdFx0XHRjb25zdCBhcnIgPSBbLi4udGFyZ2V0XTtcblx0XHRcdFx0XHRjb25zdCBpbmRleCA9IE51bWJlcihwcm9wKSA8IDAgPyBhcnIubGVuZ3RoIC0gcHJvcCA6IHByb3A7XG5cdFx0XHRcdFx0cmV0dXJuIGFycltpbmRleF07XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHRbU3ltYm9sLml0ZXJhdG9yXSA9ICgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy4jbWFwLnZhbHVlcygpO1xuXHR9O1xuXG5cdGdldCBsZW5ndGgoKSB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20odGhpcy4jbWFwLnZhbHVlcygpKS5sZW5ndGg7XG5cdH1cblxuXHRhZGQgPSAodmFsdWUpID0+IHtcblx0XHRpZiAoIXRoaXMuaGFzKHZhbHVlKSkge1xuXHRcdFx0dGhpcy5zZXQodmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblx0c2V0ID0gKHZhbHVlKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBba2V5RnVuYywgaW5kZXhdIG9mIHRoaXMuI2luZGV4ZXMuZW50cmllcygpKSB7XG5cdFx0XHRpbmRleC5zZXQoa2V5RnVuYyh2YWx1ZSksIHZhbHVlKTtcblx0XHR9XG5cdFx0dGhpcy4jbWFwLnNldCh0aGlzLiNrZXkodmFsdWUpLCB2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cdGNsZWFyID0gKCkgPT4ge1xuXHRcdGZvciAoY29uc3QgaW5kZXggb2YgdGhpcy4jaW5kZXhlcy52YWx1ZXMoKSkge1xuXHRcdFx0aW5kZXguY2xlYXIoKTtcblx0XHR9XG5cdFx0dGhpcy4jbWFwLmNsZWFyKCk7XG5cdH07XG5cdGRlbGV0ZSA9ICh2YWx1ZSkgPT4ge1xuXHRcdGxldCByZWNvcmQ7XG5cdFx0Zm9yIChjb25zdCBba2V5RnVuYywgaW5kZXhdIG9mIHRoaXMuI2luZGV4ZXMuZW50cmllcygpKSB7XG5cdFx0XHRyZWNvcmQgPSByZWNvcmQgfHwgaW5kZXguZ2V0KGtleUZ1bmModmFsdWUpKTtcblx0XHRcdGluZGV4LmRlbGV0ZShrZXlGdW5jKHZhbHVlKSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLiNtYXAuZGVsZXRlKHRoaXMuI2tleShyZWNvcmQpKTtcblx0fTtcblx0ZW50cmllcyA9ICgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy4jbWFwLmVudHJpZXMoKTtcblx0fTtcblx0Zm9yRWFjaCA9IChjYWxsYmFjaykgPT4ge1xuXHRcdEFycmF5LmZyb20odGhpcy4jbWFwLnZhbHVlcygpKS5mb3JFYWNoKCh2YWwsIGksIGFycikgPT4ge1xuXHRcdFx0Y2FsbGJhY2sodmFsLCBpLCBhcnIpO1xuXHRcdH0pO1xuXHR9O1xuXHRnZXQgPSAodmFsdWUpID0+IHtcblx0XHRpZiAodGhpcy4jbWFwLmhhcyh0aGlzLiNrZXkodmFsdWUpKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuI21hcC5nZXQodGhpcy4ja2V5KHZhbHVlKSk7XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgW2tleUZ1bmMsIGluZGV4XSBvZiB0aGlzLiNpbmRleGVzLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKGluZGV4LmhhcyhrZXlGdW5jKHZhbHVlKSkpIHtcblx0XHRcdFx0cmV0dXJuIGluZGV4LmdldChrZXlGdW5jKHZhbHVlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH07XG5cdGhhcyA9ICh2YWx1ZSkgPT4ge1xuXHRcdHJldHVybiB0aGlzLmdldCh2YWx1ZSkgIT09IHVuZGVmaW5lZDtcblx0fTtcblx0a2V5cyA9ICgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy4jbWFwLmtleXMoKTtcblx0fTtcblx0dmFsdWVzID0gKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLiNtYXAudmFsdWVzKCk7XG5cdH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gS2V5ZWRTZXQ7XG4iXSwibWFwcGluZ3MiOiJBQUFBLE1BQU07RUFBRUE7QUFBTSxDQUFDLEdBQUdDLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQzs7QUFFN0Q7QUFDQSxNQUFNQyxRQUFRLENBQUM7RUFDZCxDQUFDQyxHQUFHLEdBQUcsSUFBSUMsR0FBRyxDQUFDLENBQUM7RUFDaEIsQ0FBQ0MsT0FBTyxHQUFHLElBQUlELEdBQUcsQ0FBQyxDQUFDO0VBQ3BCLENBQUNFLEdBQUcsR0FBSUMsS0FBSyxJQUFLO0lBQ2pCO0lBQ0EsT0FBT1AsS0FBSyxDQUFDLEdBQUdRLEtBQUssQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDSixPQUFPLENBQUNLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ1AsR0FBRyxDQUFFUSxPQUFPLElBQUtBLE9BQU8sQ0FBQ0osS0FBSyxDQUFDLENBQUMsQ0FBQztFQUNuRixDQUFDO0VBRURLLFdBQVdBLENBQUMsR0FBR0MsUUFBUSxFQUFFO0lBQ3hCQSxRQUFRLENBQUNDLE9BQU8sQ0FBRUgsT0FBTyxJQUFLO01BQzdCLElBQUksQ0FBQyxDQUFDTixPQUFPLENBQUNVLEdBQUcsQ0FBRVIsS0FBSyxJQUFLUCxLQUFLLENBQUNTLElBQUksQ0FBQyxDQUFDRSxPQUFPLENBQUNKLEtBQUssQ0FBQyxDQUFDLENBQUNTLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJWixHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUMsQ0FBQztJQUNGLE9BQU8sSUFBSWEsS0FBSyxDQUFDLElBQUksRUFBRTtNQUN0QkMsR0FBR0EsQ0FBQ0MsTUFBTSxFQUFFQyxJQUFJLEVBQUU7UUFDakIsSUFBSUEsSUFBSSxJQUFJRCxNQUFNLEVBQUU7VUFDbkIsT0FBT0EsTUFBTSxDQUFDQyxJQUFJLENBQUM7UUFDcEIsQ0FBQyxNQUFNLElBQUks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