From fa167d9a8ca46ce4805cc8e97e7d6b78a7a1f337 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Mon, 19 Dec 2016 17:07:22 -0800 Subject: [PATCH] config: querystring parsing. --- lib/node/config.js | 53 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 7 deletions(-) diff --git a/lib/node/config.js b/lib/node/config.js index f3448d28..7acfe5c6 100644 --- a/lib/node/config.js +++ b/lib/node/config.js @@ -10,6 +10,7 @@ var Network = require('../protocol/network'); var util = require('../utils/util'); var assert = require('assert'); var fs = require('fs'); +var global = util.global; /** * @exports config @@ -69,6 +70,12 @@ config.parse = function parse(options) { merge(data, arg); } + if (options.hash) { + arg = config.parseHash(); + merge(raw, arg.data); + merge(data, arg); + } + if (data.config && !util.isBrowser) { prefix = config.getPrefix(data); filename = data.config; @@ -434,24 +441,56 @@ config.parseEnv = function parseEnv(env) { }; /** - * Parse querystring variables. + * Parse uri querystring variables. * @param {String} query * @returns {Object} */ config.parseQuery = function parseQuery(query) { + if (query == null) { + if (!util.isBrowser || !global.location) + return {}; + + query = global.location.search || ''; + } + + return config.parseForm(query); +}; + +/** + * Parse uri hash variables. + * @param {String} hash + * @returns {Object} + */ + +config.parseHash = function parseHash(hash) { + if (hash == null) { + if (!util.isBrowser || !global.location) + return {}; + + hash = global.location.hash || ''; + } + + return config.parseForm(hash); +}; + +/** + * Parse form-urlencoded variables. + * @param {String} query + * @returns {Object} + */ + +config.parseForm = function parseForm(query) { var data = {}; var i, parts, index, pair, key, value, alias; - if (!util.isBrowser) + assert(typeof query === 'string'); + + if (query.length === 0) return data; - if (query == null) { - query = util.global.location.search; - if (typeof query !== 'string') - return data; + if (query[0] === '?' || query[0] === '#') query = query.substring(1); - } parts = query.split('&');