diff options
author | Matt A. Tobin <email@mattatobin.com> | 2018-02-09 06:46:43 -0500 |
---|---|---|
committer | Matt A. Tobin <email@mattatobin.com> | 2018-02-09 06:46:43 -0500 |
commit | ac46df8daea09899ce30dc8fd70986e258c746bf (patch) | |
tree | 2750d3125fc253fd5b0671e4bd268eff1fd97296 /addon-sdk/source/lib/sdk/querystring.js | |
parent | 8cecf8d5208f3945b35f879bba3015bb1a11bec6 (diff) | |
download | UXP-ac46df8daea09899ce30dc8fd70986e258c746bf.tar UXP-ac46df8daea09899ce30dc8fd70986e258c746bf.tar.gz UXP-ac46df8daea09899ce30dc8fd70986e258c746bf.tar.lz UXP-ac46df8daea09899ce30dc8fd70986e258c746bf.tar.xz UXP-ac46df8daea09899ce30dc8fd70986e258c746bf.zip |
Move Add-on SDK source to toolkit/jetpack
Diffstat (limited to 'addon-sdk/source/lib/sdk/querystring.js')
-rw-r--r-- | addon-sdk/source/lib/sdk/querystring.js | 121 |
1 files changed, 0 insertions, 121 deletions
diff --git a/addon-sdk/source/lib/sdk/querystring.js b/addon-sdk/source/lib/sdk/querystring.js deleted file mode 100644 index 9982a00ab..000000000 --- a/addon-sdk/source/lib/sdk/querystring.js +++ /dev/null @@ -1,121 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -'use strict'; - -module.metadata = { - "stability": "unstable" -}; - -var unescape = decodeURIComponent; -exports.unescape = unescape; - -// encodes a string safely for application/x-www-form-urlencoded -// adheres to RFC 3986 -// see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/encodeURIComponent -function escape(query) { - return encodeURIComponent(query). - replace(/%20/g, '+'). - replace(/!/g, '%21'). - replace(/'/g, '%27'). - replace(/\(/g, '%28'). - replace(/\)/g, '%29'). - replace(/\*/g, '%2A'); -} -exports.escape = escape; - -// Converts an object of unordered key-vals to a string that can be passed -// as part of a request -function stringify(options, separator, assigner) { - separator = separator || '&'; - assigner = assigner || '='; - // Explicitly return null if we have null, and empty string, or empty object. - if (!options) - return ''; - - // If content is already a string, just return it as is. - if (typeof(options) == 'string') - return options; - - // At this point we have a k:v object. Iterate over it and encode each value. - // Arrays and nested objects will get encoded as needed. For example... - // - // { foo: [1, 2, { omg: 'bbq', 'all your base!': 'are belong to us' }], bar: 'baz' } - // - // will be encoded as - // - // foo[0]=1&foo[1]=2&foo[2][omg]=bbq&foo[2][all+your+base!]=are+belong+to+us&bar=baz - // - // Keys (including '[' and ']') and values will be encoded with - // `escape` before returning. - // - // Execution was inspired by jQuery, but some details have changed and numeric - // array keys are included (whereas they are not in jQuery). - - let encodedContent = []; - function add(key, val) { - encodedContent.push(escape(key) + assigner + escape(val)); - } - - function make(key, value) { - if (value && typeof(value) === 'object') - Object.keys(value).forEach(function(name) { - make(key + '[' + name + ']', value[name]); - }); - else - add(key, value); - } - - Object.keys(options).forEach(function(name) { make(name, options[name]); }); - return encodedContent.join(separator); - - //XXXzpao In theory, we can just use a FormData object on 1.9.3, but I had - // trouble getting that working. It would also be nice to stay - // backwards-compat as long as possible. Keeping this in for now... - // let formData = Cc['@mozilla.org/files/formdata;1']. - // createInstance(Ci.nsIDOMFormData); - // for ([k, v] in Iterator(content)) { - // formData.append(k, v); - // } - // return formData; -} -exports.stringify = stringify; - -// Exporting aliases that nodejs implements just for the sake of -// interoperability. -exports.encode = stringify; -exports.serialize = stringify; - -// Note: That `stringify` and `parse` aren't bijective as we use `stringify` -// as it was implement in request module, but implement `parse` to match nodejs -// behavior. -// TODO: Make `stringify` implement API as in nodejs and figure out backwards -// compatibility. -function parse(query, separator, assigner) { - separator = separator || '&'; - assigner = assigner || '='; - let result = {}; - - if (typeof query !== 'string' || query.length === 0) - return result; - - query.split(separator).forEach(function(chunk) { - let pair = chunk.split(assigner); - let key = unescape(pair[0]); - let value = unescape(pair.slice(1).join(assigner)); - - if (!(key in result)) - result[key] = value; - else if (Array.isArray(result[key])) - result[key].push(value); - else - result[key] = [result[key], value]; - }); - - return result; -}; -exports.parse = parse; -// Exporting aliases that nodejs implements just for the sake of -// interoperability. -exports.decode = parse; |