diff options
Diffstat (limited to 'node_modules/@jet-app/app-store/tmp/src/foundation/metrics/buy-parameters.js')
| -rw-r--r-- | node_modules/@jet-app/app-store/tmp/src/foundation/metrics/buy-parameters.js | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/node_modules/@jet-app/app-store/tmp/src/foundation/metrics/buy-parameters.js b/node_modules/@jet-app/app-store/tmp/src/foundation/metrics/buy-parameters.js new file mode 100644 index 0000000..a48e886 --- /dev/null +++ b/node_modules/@jet-app/app-store/tmp/src/foundation/metrics/buy-parameters.js @@ -0,0 +1,112 @@ +import { isNothing, isSome } from "@jet/environment/types/optional"; +/** + * An object which allows buy parameters to be operated on like a hash map. + */ +export class BuyParameters { + /** + * Create a buy parameters object with an optional string representation. + * + * @param buyParams A string containing buy parameters. + */ + constructor(buyParams) { + this._values = {}; + if (isSome(buyParams) && buyParams.length > 0) { + const pairs = buyParams.split("&"); + for (const pair of pairs) { + const [encodedKey, encodedValue] = pair.split("="); + const key = decodeURIComponent(encodedKey); + const value = isNothing(encodedValue) ? "" : decodeURIComponent(encodedValue); + this._values[key] = value; + } + } + } + /** + * Determine the search key to use for the given parameters. + * + * @param key The key to determine the search value for. + * @param prefix An optional prefix to prepend to `key`. + * @returns A key which can be used to store and retrieve + * values in this buy parameters object. + */ + _searchKey(key, prefix) { + if (key.length === 0) { + throw new Error("key may not be zero length"); + } + if (isNothing(prefix) || prefix.length === 0) { + return key; + } + else { + return `${prefix}${key.charAt(0).toUpperCase()}${key.slice(1)}`; + } + } + /** + * Returns the value associated with a given key. + * + * @param key The key to retrieve the associated value for. + * @param keyPrefix The prefix to add to the key. Defaults to `mt`. + * @returns The value associated with `key`, or `undefined` is none is found. + */ + get(key, keyPrefix = "mt") { + const searchKey = this._searchKey(key, keyPrefix); + return this._values[searchKey]; + } + /** + * Add a given key-value pair to this buy parameters. + * + * If a value was previously associated with `key`, + * it will be replaced with `value`. + * + * @param key The key to associate `value` with in these buy parameters. + * @param value The value to add to the buy parameters. If value is `undefined` + * or `null`, any values previously associated with `key` will be removed. + * @param keyPrefix The prefix to add to the key. Defaults to `mt`. + * @returns `this` + */ + set(key, value, keyPrefix = "mt") { + const searchKey = this._searchKey(key, keyPrefix); + if (isNothing(value)) { + delete this._values[searchKey]; + } + else { + this._values[searchKey] = value; + } + return this; + } + /** + * Convert this buy parameters to its string representation. + */ + toString() { + let buyParams = ""; + for (const key of Object.keys(this._values)) { + const value = this._values[key]; + if (buyParams.length > 0) { + buyParams += "&"; + } + buyParams += encodeURIComponent(key); + buyParams += "="; + buyParams += encodeURIComponent(value); + } + return buyParams; + } + /** + * Convert the buy params into a map representation, in which + * the keys and values are encoded. + */ + toEncodedMap() { + const map = {}; + for (const key of Object.keys(this._values)) { + const value = this._values[key]; + const encodedKey = encodeURIComponent(key); + const encodedValue = encodeURIComponent(value); + map[encodedKey] = encodedValue; + } + return map; + } + /** + * Buy params in a raw (non url encoded) map representation. + */ + toRawMap() { + return { ...this._values }; + } +} +//# sourceMappingURL=buy-parameters.js.map
\ No newline at end of file |
