summaryrefslogtreecommitdiff
path: root/includes/external/school/node_modules/querystringify/index.js
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2023-02-23 19:34:56 +0100
committerMinteck <contact@minteck.org>2023-02-23 19:34:56 +0100
commit3d1cd02f27518f1a04374c7c8320cd5d82ede6e9 (patch)
tree75be5fba4368472fb11c8015aee026b2b9a71888 /includes/external/school/node_modules/querystringify/index.js
parent8cc1f13c17fa2fb5a4410542d39e650e02945634 (diff)
downloadpluralconnect-3d1cd02f27518f1a04374c7c8320cd5d82ede6e9.tar.gz
pluralconnect-3d1cd02f27518f1a04374c7c8320cd5d82ede6e9.tar.bz2
pluralconnect-3d1cd02f27518f1a04374c7c8320cd5d82ede6e9.zip
Updated 40 files, added 37 files, deleted 1103 files and renamed 3905 files (automated)
Diffstat (limited to 'includes/external/school/node_modules/querystringify/index.js')
-rw-r--r--includes/external/school/node_modules/querystringify/index.js118
1 files changed, 118 insertions, 0 deletions
diff --git a/includes/external/school/node_modules/querystringify/index.js b/includes/external/school/node_modules/querystringify/index.js
new file mode 100644
index 0000000..58c9808
--- /dev/null
+++ b/includes/external/school/node_modules/querystringify/index.js
@@ -0,0 +1,118 @@
+'use strict';
+
+var has = Object.prototype.hasOwnProperty
+ , undef;
+
+/**
+ * Decode a URI encoded string.
+ *
+ * @param {String} input The URI encoded string.
+ * @returns {String|Null} The decoded string.
+ * @api private
+ */
+function decode(input) {
+ try {
+ return decodeURIComponent(input.replace(/\+/g, ' '));
+ } catch (e) {
+ return null;
+ }
+}
+
+/**
+ * Attempts to encode a given input.
+ *
+ * @param {String} input The string that needs to be encoded.
+ * @returns {String|Null} The encoded string.
+ * @api private
+ */
+function encode(input) {
+ try {
+ return encodeURIComponent(input);
+ } catch (e) {
+ return null;
+ }
+}
+
+/**
+ * Simple query string parser.
+ *
+ * @param {String} query The query string that needs to be parsed.
+ * @returns {Object}
+ * @api public
+ */
+function querystring(query) {
+ var parser = /([^=?#&]+)=?([^&]*)/g
+ , result = {}
+ , part;
+
+ while (part = parser.exec(query)) {
+ var key = decode(part[1])
+ , value = decode(part[2]);
+
+ //
+ // Prevent overriding of existing properties. This ensures that build-in
+ // methods like `toString` or __proto__ are not overriden by malicious
+ // querystrings.
+ //
+ // In the case if failed decoding, we want to omit the key/value pairs
+ // from the result.
+ //
+ if (key === null || value === null || key in result) continue;
+ result[key] = value;
+ }
+
+ return result;
+}
+
+/**
+ * Transform a query string to an object.
+ *
+ * @param {Object} obj Object that should be transformed.
+ * @param {String} prefix Optional prefix.
+ * @returns {String}
+ * @api public
+ */
+function querystringify(obj, prefix) {
+ prefix = prefix || '';
+
+ var pairs = []
+ , value
+ , key;
+
+ //
+ // Optionally prefix with a '?' if needed
+ //
+ if ('string' !== typeof prefix) prefix = '?';
+
+ for (key in obj) {
+ if (has.call(obj, key)) {
+ value = obj[key];
+
+ //
+ // Edge cases where we actually want to encode the value to an empty
+ // string instead of the stringified value.
+ //
+ if (!value && (value === null || value === undef || isNaN(value))) {
+ value = '';
+ }
+
+ key = encode(key);
+ value = encode(value);
+
+ //
+ // If we failed to encode the strings, we should bail out as we don't
+ // want to add invalid strings to the query.
+ //
+ if (key === null || value === null) continue;
+ pairs.push(key +'='+ value);
+ }
+ }
+
+ return pairs.length ? prefix + pairs.join('&') : '';
+}
+
+//
+// Expose the module.
+//
+exports.stringify = querystringify;
+exports.parse = querystring;