123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- 'use strict';
- module.metadata = {
- "stability": "unstable"
- };
- let unescape = decodeURIComponent;
- exports.unescape = unescape;
- 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;
- function stringify(options, separator, assigner) {
- separator = separator || '&';
- assigner = assigner || '=';
-
- if (!options)
- return '';
-
- if (typeof(options) == 'string')
- return options;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 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);
-
-
-
-
-
-
-
-
-
- }
- exports.stringify = stringify;
- exports.encode = stringify;
- exports.serialize = stringify;
- 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;
- exports.decode = parse;
|