mirror of
https://github.com/status-im/consul.git
synced 2025-01-13 23:36:00 +00:00
6589cbbd0d
* ui: Add the most basic workspace root in /ui * We already have a LICENSE file in the repository root * Change directory path in build scripts ui-v2 -> ui * Make yarn install flags configurable from elsewhere * Minimal workspace root makefile * Call the new docker specific target * Update yarn in the docker build image * Reconfigure the netlify target and move to the higher makefile * Move ui-v2 -> ui/packages/consul-ui * Change repo root to refleect new folder structure * Temporarily don't hoist consul-api-double * Fixup CI configuration * Fixup lint errors * Fixup Netlify target
73 lines
2.3 KiB
JavaScript
73 lines
2.3 KiB
JavaScript
// const METHOD_PARSING = 0;
|
|
const PATH_PARSING = 1;
|
|
const QUERY_PARSING = 2;
|
|
const HEADER_PARSING = 3;
|
|
const BODY_PARSING = 4;
|
|
export default function(encode, queryParams) {
|
|
return function(strs, ...values) {
|
|
// TODO: Potentially url should check if any of the params
|
|
// passed to it are undefined (null is fine). We could then get rid of the
|
|
// multitude of checks we do throughout the adapters
|
|
// right now create-url converts undefined to '' so we need to check thats not needed
|
|
// anywhere
|
|
let state = PATH_PARSING;
|
|
return strs
|
|
.map(function(item, i, arr) {
|
|
if (i === 0) {
|
|
item = item.trimStart();
|
|
}
|
|
// if(item.indexOf(' ') !== -1 && state === METHOD_PARSING) {
|
|
// state = PATH_PARSING;
|
|
// }
|
|
if (item.indexOf('?') !== -1 && state === PATH_PARSING) {
|
|
state = QUERY_PARSING;
|
|
}
|
|
if (item.indexOf('\n\n') !== -1) {
|
|
state = BODY_PARSING;
|
|
}
|
|
if (item.indexOf('\n') !== -1 && state !== BODY_PARSING) {
|
|
state = HEADER_PARSING;
|
|
}
|
|
let val = typeof values[i] !== 'undefined' ? values[i] : '';
|
|
switch (state) {
|
|
case PATH_PARSING:
|
|
switch (true) {
|
|
// encode strings
|
|
case typeof val === 'string':
|
|
val = encode(val);
|
|
break;
|
|
// split encode and join arrays by `/`
|
|
case Array.isArray(val):
|
|
val = val
|
|
.map(function(item) {
|
|
return `${encode(item)}`;
|
|
}, '')
|
|
.join('/');
|
|
break;
|
|
}
|
|
break;
|
|
case QUERY_PARSING:
|
|
switch (true) {
|
|
case typeof val === 'string':
|
|
val = encode(val);
|
|
break;
|
|
// objects offload to queryParams for encoding
|
|
case typeof val === 'object':
|
|
val = queryParams(val);
|
|
break;
|
|
}
|
|
break;
|
|
case BODY_PARSING:
|
|
// ignore body until we parse it here
|
|
return item.split('\n\n')[0];
|
|
// case METHOD_PARSING:
|
|
case HEADER_PARSING:
|
|
// passthrough/ignore method and headers until we parse them here
|
|
}
|
|
return `${item}${val}`;
|
|
})
|
|
.join('')
|
|
.trim();
|
|
};
|
|
}
|