Skip to content

Commit

Permalink
feat: options.mediaType.format and options.mediaType.previews
Browse files Browse the repository at this point in the history
  • Loading branch information
gr2m committed Mar 13, 2019
1 parent 5146479 commit e818516
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 1 deletion.
4 changes: 4 additions & 0 deletions lib/defaults.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,9 @@ module.exports = {
headers: {
accept: 'application/vnd.github.v3+json',
'user-agent': userAgent
},
mediaType: {
format: '',
previews: []
}
}
6 changes: 6 additions & 0 deletions lib/merge.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,11 @@ function defaultOptions (defaults, route, options) {

options = merge.all([defaults, options].filter(Boolean), { isMergeableObject: isPlainObject })

// mediaType.previews arrays are merged, instead of overwritten
if (defaults && defaults.mediaType.previews.length) {
options.mediaType.previews = defaults.mediaType.previews.filter(preview => !options.mediaType.previews.includes(preview))
.concat(options.mediaType.previews)
}

return options
}
13 changes: 12 additions & 1 deletion lib/parse.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ function toRequestOptions (options) {
let url = options.url.replace(/:([a-z]\w+)/g, '{+$1}')
let headers = options.headers
let body
let parameters = omit(options, ['method', 'baseUrl', 'url', 'headers', 'request'])
let parameters = omit(options, ['method', 'baseUrl', 'url', 'headers', 'request', 'mediaType'])

// extract variable names from URL to calculate remaining variables later
const urlVariableNames = extractUrlVariableNames(url)
Expand All @@ -27,6 +27,17 @@ function toRequestOptions (options) {
const omittedParameters = Object.keys(options).filter((option) => urlVariableNames.includes(option)).concat('baseUrl')
const remainingParameters = omit(parameters, omittedParameters)

if (options.mediaType.format) {
// e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw
headers.accept = headers.accept.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)
}

if (options.mediaType.previews.length) {
headers.accept = options.mediaType.previews.map(preview => {
return headers.accept.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd.${preview}-preview$3$4`)
}).join(',')
}

// for GET/HEAD requests, set URL query parameters from remaining parameters
// for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters
if (['GET', 'HEAD'].includes(method)) {
Expand Down

0 comments on commit e818516

Please sign in to comment.