All files / Sources/Common/Core/URLExtract index.js

33.33% Statements 8/24
20% Branches 6/30
50% Functions 3/6
30.43% Lines 7/23

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61                                                                              2x 2x 2x         2x 2x 2x         2x              
function identity(i) {
  return i;
}
 
function toNativeType(str) {
  if (str === null || str === 'null') {
    return null;
  }
 
  if (str === 'true') {
    return true;
  }
 
  if (str === 'false') {
    return false;
  }
 
  if (str === undefined || str === 'undefined') {
    return undefined;
  }
 
  if (str[0] === '[' && str[str.length - 1] === ']') {
    return str
      .substring(1, str.length - 1)
      .split(',')
      .map((s) => toNativeType(s.trim()));
  }
 
  if (str === '' || Number.isNaN(Number(str))) {
    return str;
  }
 
  return Number(str);
}
 
function extractURLParameters(
  castToNativeType = true,
  query = window.location.search
) {
  const summary = {};
  const convert = castToNativeType ? toNativeType : identity;
  const queryTokens = (query || '')
    .replace(/#.*/, '') // remove hash query
    .replace('?', '') // Remove ? from the head
    .split('&'); // extract token pair
 
  queryTokens.forEach((token) => {
    const [key, value] = token.split('=').map((s) => decodeURIComponent(s));
    Iif (key) {
      summary[key] = value ? convert(value) : true;
    }
  });
 
  return summary;
}
 
export default {
  toNativeType,
  extractURLParameters,
};