keyvalue.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. const utils_lang_1 = require("./utils.lang");
  4. class SortedKeyValue {
  5. constructor(obj, selectkeys) {
  6. this._keys = [];
  7. this._values = [];
  8. this._pairs = [];
  9. this._obj = {};
  10. if (!utils_lang_1.isObject(obj)) {
  11. return this;
  12. }
  13. // https://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order
  14. // https://www.stefanjudis.com/today-i-learned/property-order-is-predictable-in-javascript-objects-since-es2015/
  15. Object.keys(obj || {}).sort((l, r) => {
  16. return l.toString().localeCompare(r);
  17. }).forEach(key => {
  18. if (!selectkeys || selectkeys.includes(key)) {
  19. this._keys.push(key);
  20. this._values.push(obj[key]);
  21. this._pairs.push([key, obj[key]]);
  22. this._obj[key.toLowerCase()] = obj[key];
  23. }
  24. });
  25. }
  26. static kv(obj, selectkeys) {
  27. return new SortedKeyValue(obj, selectkeys);
  28. }
  29. get(key) {
  30. return this._obj[key];
  31. }
  32. keys() {
  33. return this._keys;
  34. }
  35. values() {
  36. return this._values;
  37. }
  38. pairs() {
  39. return this._pairs;
  40. }
  41. toString(kvSeparator = '=', joinSeparator = '&') {
  42. return this._pairs.map((pair) => pair.join(kvSeparator)).join(joinSeparator);
  43. }
  44. }
  45. exports.SortedKeyValue = SortedKeyValue;