@regionorebrolan/extensions
Version:
Library with JavaScript additions and extensions.
187 lines • 7.55 kB
JavaScript
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var QueryParameter_1 = __importDefault(require("./QueryParameter"));
var QueryValueSet_1 = __importDefault(require("./QueryValueSet"));
var ReadCollection_1 = __importDefault(require("./ReadCollection"));
var url_search_params_1 = __importDefault(require("core-js/web/url-search-params"));
var Utility_1 = __importDefault(require("../Utility"));
var QueryCollection = /** @class */ (function (_super) {
__extends(QueryCollection, _super);
// Constructors
function QueryCollection(keyComparer, parameterFactory, changeHandler, query) {
var e_1, _a;
var _this = this;
if (Utility_1.default.isNullOrUndefined(keyComparer))
throw new Error("The key-comparer can not be null or undefined.");
if (Utility_1.default.isNullOrUndefined(parameterFactory))
throw new Error("The parameter-factory can not be null or undefined.");
_this = _super.call(this) || this;
_this._changeHandler = (function () { });
_this._keyComparer = keyComparer;
_this._parameterFactory = parameterFactory;
try {
for (var _b = __values(new url_search_params_1.default(query || "").entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
var entry = _c.value;
_this.add(entry[0], entry[1].split(QueryValueSet_1.default.valueSeparator));
}
}
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; }
}
if (changeHandler)
_this._changeHandler = changeHandler;
return _this;
}
Object.defineProperty(QueryCollection.prototype, "changeHandler", {
// Properties
get: function () {
return this._changeHandler;
},
enumerable: false,
configurable: true
});
Object.defineProperty(QueryCollection.prototype, "keyComparer", {
get: function () {
return this._keyComparer;
},
enumerable: false,
configurable: true
});
Object.defineProperty(QueryCollection.prototype, "parameterFactory", {
get: function () {
return this._parameterFactory;
},
enumerable: false,
configurable: true
});
// Methods
QueryCollection.prototype.add = function (key, values) {
var added = this.addInternal(key, values);
if (added > 0)
this.changeHandler();
return added;
};
QueryCollection.prototype.addInternal = function (key, values) {
var _this = this;
var parameterCreated = false;
var parameter = this.get(key);
if (!parameter) {
parameter = this.parameterFactory.create(key);
parameterCreated = true;
}
var added = parameter.values.add(values);
if (added > 0 && parameterCreated) {
this.items.push(parameter);
this.items.sort(function (first, second) {
return _this.keyComparer.compare(first.key, second.key);
});
}
return added;
};
QueryCollection.prototype.clear = function () {
var count = this.count;
this.items.length = 0;
if (count > 0)
this.changeHandler();
};
QueryCollection.prototype.get = function (key) {
var e_2, _a;
try {
for (var _b = __values(this.items), _c = _b.next(); !_c.done; _c = _b.next()) {
var item = _c.value;
if (this.keyComparer.equals(key, item.key))
return item;
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_2) throw e_2.error; }
}
return null;
};
QueryCollection.prototype.remove = function (key, values) {
var result = this.removeInternal(key, values);
if (result[0] || result[1] > 0)
this.changeHandler();
return result[1];
};
QueryCollection.prototype.removeInternal = function (key, values) {
var keyRemoved = false;
var valuesRemoved = 0;
for (var i = this.count - 1; i >= 0; i--) {
var parameter = this.items[i];
if (this.keyComparer.equals(key, parameter.key)) {
valuesRemoved = values ? parameter.values.remove(values) : parameter.values.count;
if (!values) {
this.items.splice(i, 1);
keyRemoved = true;
}
break;
}
}
return [keyRemoved, valuesRemoved];
};
QueryCollection.prototype.set = function (key, values) {
var removeResult = this.removeInternal(key);
var added = this.addInternal(key, values);
if (added > 0 || removeResult[0] || removeResult[1] > 0)
this.changeHandler();
return added;
};
QueryCollection.prototype.toString = function () {
return this.toUrlString();
};
QueryCollection.prototype.toUrlString = function (encode) {
if (encode === void 0) { encode = true; }
var parts = [];
this.forEach(function (item) {
var key = item.key;
var valueString = item.values.toString();
if (encode) {
key = encodeURIComponent(key);
valueString = encodeURIComponent(valueString).replace(/%2C/g, "%2c");
}
parts.push(key + QueryParameter_1.default.keyValueSeparator + valueString);
});
return (parts.length > 0 ? QueryCollection._questionMark : "") + parts.join(QueryCollection._parameterSeparator);
};
QueryCollection._parameterSeparator = "&";
QueryCollection._questionMark = "?";
return QueryCollection;
}(ReadCollection_1.default));
exports.default = QueryCollection;
//# sourceMappingURL=QueryCollection.js.map