apiaryio/fury-adapter-swagger

View on GitHub
src/uri-template.js

Summary

Maintainability
A
0 mins
Test Coverage
import _ from 'lodash';

function escapeUriTemplateVariable(variable) {
  return encodeURIComponent(variable)
    .replace(/[-.!~*'()]/g, c => `%${c.charCodeAt(0).toString(16)}`);
}

export default function (basePath, href, pathObjectParams = [], queryParams = []) {
  const parameterNames = _.chain(pathObjectParams)
    .concat(queryParams)
    .filter(parameter => parameter.in === 'query')
    .uniqBy(parameter => parameter.name)
    .map((parameter) => {
      const name = escapeUriTemplateVariable(parameter.name);

      if (parameter.collectionFormat === 'multi') {
        return `${name}*`;
      }

      return name;
    })
    .value();

  if (parameterNames.length > 0) {
    const queryString = parameterNames.join(',');
    return `${basePath}${href}{?${queryString}}`;
  }

  return basePath + href;
}