Sha256: d19af15315bc0e6f10fe34e8bf6a1c722ab0d3df8a5d6713e7cd4c8cb2ea102f

Contents?: true

Size: 1.48 KB

Versions: 40

Compression:

Stored size: 1.48 KB

Contents

'use strict';

const JSON5 = require('json5');

const specialValues = {
  null: null,
  true: true,
  false: false,
};

function parseQuery(query) {
  if (query.substr(0, 1) !== '?') {
    throw new Error(
      "A valid query string passed to parseQuery should begin with '?'"
    );
  }

  query = query.substr(1);

  if (!query) {
    return {};
  }

  if (query.substr(0, 1) === '{' && query.substr(-1) === '}') {
    return JSON5.parse(query);
  }

  const queryArgs = query.split(/[,&]/g);
  const result = {};

  queryArgs.forEach((arg) => {
    const idx = arg.indexOf('=');

    if (idx >= 0) {
      let name = arg.substr(0, idx);
      let value = decodeURIComponent(arg.substr(idx + 1));

      // eslint-disable-next-line no-prototype-builtins
      if (specialValues.hasOwnProperty(value)) {
        value = specialValues[value];
      }

      if (name.substr(-2) === '[]') {
        name = decodeURIComponent(name.substr(0, name.length - 2));

        if (!Array.isArray(result[name])) {
          result[name] = [];
        }

        result[name].push(value);
      } else {
        name = decodeURIComponent(name);
        result[name] = value;
      }
    } else {
      if (arg.substr(0, 1) === '-') {
        result[decodeURIComponent(arg.substr(1))] = false;
      } else if (arg.substr(0, 1) === '+') {
        result[decodeURIComponent(arg.substr(1))] = true;
      } else {
        result[decodeURIComponent(arg)] = true;
      }
    }
  });

  return result;
}

module.exports = parseQuery;

Version data entries

40 entries across 15 versions & 5 rubygems

Version Path
optimacms-0.1.61 spec/dummy/node_modules/css-loader/node_modules/loader-utils/lib/parseQuery.js
optimacms-0.1.61 spec/dummy/node_modules/file-loader/node_modules/loader-utils/lib/parseQuery.js
optimacms-0.1.61 spec/dummy/node_modules/@rails/webpacker/node_modules/style-loader/node_modules/loader-utils/lib/parseQuery.js
disco_app-0.16.1 test/dummy/node_modules/file-loader/node_modules/loader-utils/lib/parseQuery.js
disco_app-0.16.1 test/dummy/node_modules/sass-loader/node_modules/loader-utils/lib/parseQuery.js
disco_app-0.16.1 test/dummy/node_modules/style-loader/node_modules/loader-utils/lib/parseQuery.js
disco_app-0.15.2 test/dummy/node_modules/sass-loader/node_modules/loader-utils/lib/parseQuery.js
disco_app-0.15.2 test/dummy/node_modules/style-loader/node_modules/loader-utils/lib/parseQuery.js
disco_app-0.15.2 test/dummy/node_modules/file-loader/node_modules/loader-utils/lib/parseQuery.js
disco_app-0.18.4 test/dummy/node_modules/file-loader/node_modules/loader-utils/lib/parseQuery.js
disco_app-0.18.4 test/dummy/node_modules/sass-loader/node_modules/loader-utils/lib/parseQuery.js
disco_app-0.18.4 test/dummy/node_modules/style-loader/node_modules/loader-utils/lib/parseQuery.js
disco_app-0.18.1 test/dummy/node_modules/file-loader/node_modules/loader-utils/lib/parseQuery.js
disco_app-0.18.1 test/dummy/node_modules/style-loader/node_modules/loader-utils/lib/parseQuery.js
disco_app-0.18.1 test/dummy/node_modules/sass-loader/node_modules/loader-utils/lib/parseQuery.js
disco_app-0.12.7.pre.puma.pre.3 test/dummy/node_modules/sass-loader/node_modules/loader-utils/lib/parseQuery.js
disco_app-0.12.7.pre.puma.pre.3 test/dummy/node_modules/file-loader/node_modules/loader-utils/lib/parseQuery.js
disco_app-0.12.7.pre.puma.pre.3 test/dummy/node_modules/style-loader/node_modules/loader-utils/lib/parseQuery.js
disco_app-0.14.0 test/dummy/node_modules/sass-loader/node_modules/loader-utils/lib/parseQuery.js
disco_app-0.14.0 test/dummy/node_modules/style-loader/node_modules/loader-utils/lib/parseQuery.js