@middy/http-content-negotiation 3.0.1 → 3.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2017-2022 Luciano Mammino, will Farrell and the [Middy team](https://github.com/middyjs/middy/graphs/contributors)
3
+ Copyright (c) 2017-2022 [Luciano Mammino](https://github.com/lmammino), [will Farrell](https://github.com/willfarrell) and the [Middy team](https://github.com/middyjs/middy/graphs/contributors)
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -9,8 +9,8 @@
9
9
  <a href="https://packagephobia.com/result?p=@middy/http-content-negotiation">
10
10
  <img src="https://packagephobia.com/badge?p=@middy/http-content-negotiation" alt="npm install size" style="max-width:100%;">
11
11
  </a>
12
- <a href="https://github.com/middyjs/middy/actions">
13
- <img src="https://github.com/middyjs/middy/workflows/Tests/badge.svg" alt="GitHub Actions test status badge" style="max-width:100%;">
12
+ <a href="https://github.com/middyjs/middy/actions/workflows/tests.yml">
13
+ <img src="https://github.com/middyjs/middy/actions/workflows/tests.yml/badge.svg?branch=main&event=push" alt="GitHub Actions CI status badge" style="max-width:100%;">
14
14
  </a>
15
15
  <br/>
16
16
  <a href="https://standardjs.com/">
@@ -33,6 +33,7 @@
33
33
  <img src="https://img.shields.io/badge/StackOverflow-[middy]-yellow" alt="Ask questions on StackOverflow" style="max-width:100%;">
34
34
  </a>
35
35
  </p>
36
+ <p>You can read the documentation at: <a href="https://middy.js.org/docs/middlewares/http-content-negotiation">https://middy.js.org/docs/middlewares/http-content-negotiation</a></p>
36
37
  </div>
37
38
 
38
39
  This middleware parses `Accept-*` headers and provides utilities for [HTTP content negotiation](https://tools.ietf.org/html/rfc7231#section-5.3) (charset, encoding, language and media type).
@@ -144,7 +145,7 @@ Everyone is very welcome to contribute to this repository. Feel free to [raise i
144
145
 
145
146
  ## License
146
147
 
147
- Licensed under [MIT License](LICENSE). Copyright (c) 2017-2022 Luciano Mammino, will Farrell, and the [Middy team](https://github.com/middyjs/middy/graphs/contributors).
148
+ Licensed under [MIT License](LICENSE). Copyright (c) 2017-2022 [Luciano Mammino](https://github.com/lmammino), [will Farrell](https://github.com/willfarrell), and the [Middy team](https://github.com/middyjs/middy/graphs/contributors).
148
149
 
149
150
  <a href="https://app.fossa.io/projects/git%2Bgithub.com%2Fmiddyjs%2Fmiddy?ref=badge_large">
150
151
  <img src="https://app.fossa.io/api/projects/git%2Bgithub.com%2Fmiddyjs%2Fmiddy.svg?type=large" alt="FOSSA Status" style="max-width:100%;">
package/index.cjs CHANGED
@@ -1,3 +1,76 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _charsetJs=_interopRequireDefault(require("negotiator/lib/charset.js"));var _encodingJs=_interopRequireDefault(require("negotiator/lib/encoding.js"));var _languageJs=_interopRequireDefault(require("negotiator/lib/language.js"));var _mediaTypeJs=_interopRequireDefault(require("negotiator/lib/mediaType.js"));var _util=require("@middy/util");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}const parseFn={Charset:_charsetJs.default,Encoding:_encodingJs.default,Language:_languageJs.default,MediaType:_mediaTypeJs.default};const defaults={parseCharsets:true,availableCharsets:undefined,parseEncodings:true,availableEncodings:undefined,parseLanguages:true,availableLanguages:undefined,defaultToFirstLanguage:false,parseMediaTypes:true,availableMediaTypes:undefined,failOnMismatch:true};const httpContentNegotiationMiddleware=(opts={})=>{const options={...defaults,...opts};const httpContentNegotiationMiddlewareBefore=async request=>{const{event}=request;if(!event.headers)return;if(options.parseCharsets){parseHeader("Accept-Charset","Charset",options.availableCharsets,options.defaultToFirstCharset,options.failOnMismatch,event)}if(options.parseEncodings){parseHeader("Accept-Encoding","Encoding",options.availableEncodings,options.defaultToFirstEncoding,options.failOnMismatch,event)}if(options.parseLanguages){parseHeader("Accept-Language","Language",options.availableLanguages,options.defaultToFirstLanguage,options.failOnMismatch,event)}if(options.parseMediaTypes){parseHeader("Accept","MediaType",options.availableMediaTypes,options.defaultToFirstMediaType,options.failOnMismatch,event)}};return{before:httpContentNegotiationMiddlewareBefore}};const parseHeader=(headerName,type,availableValues,defaultToFirstValue,failOnMismatch,event)=>{const resultsName=`preferred${type}s`;const resultName=`preferred${type}`;const headerValue=event.headers[headerName]??event.headers[headerName.toLowerCase()];event[resultsName]=parseFn[type](headerValue,availableValues);event[resultName]=event[resultsName][0];if(defaultToFirstValue&&event[resultName]===undefined){event[resultName]=availableValues[0]}if(failOnMismatch&&event[resultName]===undefined){throw(0,_util).createError(406,`Unsupported ${type}. Acceptable values: ${availableValues.join(", ")}`)}};var _default=httpContentNegotiationMiddleware;exports.default=_default
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ module.exports = void 0;
6
+ var _charsetJs = _interopRequireDefault(require("negotiator/lib/charset.js"));
7
+ var _encodingJs = _interopRequireDefault(require("negotiator/lib/encoding.js"));
8
+ var _languageJs = _interopRequireDefault(require("negotiator/lib/language.js"));
9
+ var _mediaTypeJs = _interopRequireDefault(require("negotiator/lib/mediaType.js"));
10
+ var _util = require("@middy/util");
11
+ function _interopRequireDefault(obj) {
12
+ return obj && obj.__esModule ? obj : {
13
+ default: obj
14
+ };
15
+ }
16
+ const parseFn = {
17
+ Charset: _charsetJs.default,
18
+ Encoding: _encodingJs.default,
19
+ Language: _languageJs.default,
20
+ MediaType: _mediaTypeJs.default
21
+ };
22
+ const defaults = {
23
+ parseCharsets: true,
24
+ availableCharsets: undefined,
25
+ parseEncodings: true,
26
+ availableEncodings: undefined,
27
+ parseLanguages: true,
28
+ availableLanguages: undefined,
29
+ defaultToFirstLanguage: false,
30
+ parseMediaTypes: true,
31
+ availableMediaTypes: undefined,
32
+ failOnMismatch: true
33
+ };
34
+ const httpContentNegotiationMiddleware = (opts = {})=>{
35
+ const options = {
36
+ ...defaults,
37
+ ...opts
38
+ };
39
+ const httpContentNegotiationMiddlewareBefore = async (request)=>{
40
+ const { event } = request;
41
+ if (!event.headers) return;
42
+ if (options.parseCharsets) {
43
+ parseHeader('Accept-Charset', 'Charset', options.availableCharsets, options.defaultToFirstCharset, options.failOnMismatch, event);
44
+ }
45
+ if (options.parseEncodings) {
46
+ parseHeader('Accept-Encoding', 'Encoding', options.availableEncodings, options.defaultToFirstEncoding, options.failOnMismatch, event);
47
+ }
48
+ if (options.parseLanguages) {
49
+ parseHeader('Accept-Language', 'Language', options.availableLanguages, options.defaultToFirstLanguage, options.failOnMismatch, event);
50
+ }
51
+ if (options.parseMediaTypes) {
52
+ parseHeader('Accept', 'MediaType', options.availableMediaTypes, options.defaultToFirstMediaType, options.failOnMismatch, event);
53
+ }
54
+ };
55
+ return {
56
+ before: httpContentNegotiationMiddlewareBefore
57
+ };
58
+ };
59
+ const parseHeader = (headerName, type, availableValues, defaultToFirstValue, failOnMismatch, event)=>{
60
+ const resultsName = `preferred${type}s`;
61
+ const resultName = `preferred${type}`;
62
+ const headerValue = event.headers[headerName] ?? event.headers[headerName.toLowerCase()];
63
+ event[resultsName] = parseFn[type](headerValue, availableValues);
64
+ event[resultName] = event[resultsName][0];
65
+ if (defaultToFirstValue && event[resultName] === undefined) {
66
+ event[resultName] = availableValues[0];
67
+ }
68
+ if (failOnMismatch && event[resultName] === undefined) {
69
+ throw (0, _util).createError(406, `Unsupported ${type}. Acceptable values: ${availableValues.join(', ')}`);
70
+ }
71
+ };
72
+ var _default = httpContentNegotiationMiddleware;
73
+ module.exports = _default;
74
+
2
75
 
3
76
  //# sourceMappingURL=index.cjs.map
package/index.js CHANGED
@@ -1,3 +1,65 @@
1
- import charset from"negotiator/lib/charset.js";import encoding from"negotiator/lib/encoding.js";import language from"negotiator/lib/language.js";import mediaType from"negotiator/lib/mediaType.js";import{createError}from"@middy/util";const parseFn={Charset:charset,Encoding:encoding,Language:language,MediaType:mediaType};const defaults={parseCharsets:true,availableCharsets:undefined,parseEncodings:true,availableEncodings:undefined,parseLanguages:true,availableLanguages:undefined,defaultToFirstLanguage:false,parseMediaTypes:true,availableMediaTypes:undefined,failOnMismatch:true};const httpContentNegotiationMiddleware=(opts={})=>{const options={...defaults,...opts};const httpContentNegotiationMiddlewareBefore=async request=>{const{event}=request;if(!event.headers)return;if(options.parseCharsets){parseHeader("Accept-Charset","Charset",options.availableCharsets,options.defaultToFirstCharset,options.failOnMismatch,event)}if(options.parseEncodings){parseHeader("Accept-Encoding","Encoding",options.availableEncodings,options.defaultToFirstEncoding,options.failOnMismatch,event)}if(options.parseLanguages){parseHeader("Accept-Language","Language",options.availableLanguages,options.defaultToFirstLanguage,options.failOnMismatch,event)}if(options.parseMediaTypes){parseHeader("Accept","MediaType",options.availableMediaTypes,options.defaultToFirstMediaType,options.failOnMismatch,event)}};return{before:httpContentNegotiationMiddlewareBefore}};const parseHeader=(headerName,type,availableValues,defaultToFirstValue,failOnMismatch,event)=>{const resultsName=`preferred${type}s`;const resultName=`preferred${type}`;const headerValue=event.headers[headerName]??event.headers[headerName.toLowerCase()];event[resultsName]=parseFn[type](headerValue,availableValues);event[resultName]=event[resultsName][0];if(defaultToFirstValue&&event[resultName]===undefined){event[resultName]=availableValues[0]}if(failOnMismatch&&event[resultName]===undefined){throw createError(406,`Unsupported ${type}. Acceptable values: ${availableValues.join(", ")}`)}};export default httpContentNegotiationMiddleware
1
+ import charset from 'negotiator/lib/charset.js';
2
+ import encoding from 'negotiator/lib/encoding.js';
3
+ import language from 'negotiator/lib/language.js';
4
+ import mediaType from 'negotiator/lib/mediaType.js';
5
+ import { createError } from '@middy/util';
6
+ const parseFn = {
7
+ Charset: charset,
8
+ Encoding: encoding,
9
+ Language: language,
10
+ MediaType: mediaType
11
+ };
12
+ const defaults = {
13
+ parseCharsets: true,
14
+ availableCharsets: undefined,
15
+ parseEncodings: true,
16
+ availableEncodings: undefined,
17
+ parseLanguages: true,
18
+ availableLanguages: undefined,
19
+ defaultToFirstLanguage: false,
20
+ parseMediaTypes: true,
21
+ availableMediaTypes: undefined,
22
+ failOnMismatch: true
23
+ };
24
+ const httpContentNegotiationMiddleware = (opts = {})=>{
25
+ const options = {
26
+ ...defaults,
27
+ ...opts
28
+ };
29
+ const httpContentNegotiationMiddlewareBefore = async (request)=>{
30
+ const { event } = request;
31
+ if (!event.headers) return;
32
+ if (options.parseCharsets) {
33
+ parseHeader('Accept-Charset', 'Charset', options.availableCharsets, options.defaultToFirstCharset, options.failOnMismatch, event);
34
+ }
35
+ if (options.parseEncodings) {
36
+ parseHeader('Accept-Encoding', 'Encoding', options.availableEncodings, options.defaultToFirstEncoding, options.failOnMismatch, event);
37
+ }
38
+ if (options.parseLanguages) {
39
+ parseHeader('Accept-Language', 'Language', options.availableLanguages, options.defaultToFirstLanguage, options.failOnMismatch, event);
40
+ }
41
+ if (options.parseMediaTypes) {
42
+ parseHeader('Accept', 'MediaType', options.availableMediaTypes, options.defaultToFirstMediaType, options.failOnMismatch, event);
43
+ }
44
+ };
45
+ return {
46
+ before: httpContentNegotiationMiddlewareBefore
47
+ };
48
+ };
49
+ const parseHeader = (headerName, type, availableValues, defaultToFirstValue, failOnMismatch, event)=>{
50
+ const resultsName = `preferred${type}s`;
51
+ const resultName = `preferred${type}`;
52
+ const headerValue = event.headers[headerName] ?? event.headers[headerName.toLowerCase()];
53
+ event[resultsName] = parseFn[type](headerValue, availableValues);
54
+ event[resultName] = event[resultsName][0];
55
+ if (defaultToFirstValue && event[resultName] === undefined) {
56
+ event[resultName] = availableValues[0];
57
+ }
58
+ if (failOnMismatch && event[resultName] === undefined) {
59
+ throw createError(406, `Unsupported ${type}. Acceptable values: ${availableValues.join(', ')}`);
60
+ }
61
+ };
62
+ export default httpContentNegotiationMiddleware;
63
+
2
64
 
3
65
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@middy/http-content-negotiation",
3
- "version": "3.0.1",
3
+ "version": "3.0.4",
4
4
  "description": "Http content negotiation middleware for the middy framework",
5
5
  "type": "module",
6
6
  "engines": {
@@ -55,11 +55,11 @@
55
55
  },
56
56
  "homepage": "https://middy.js.org",
57
57
  "dependencies": {
58
- "@middy/util": "^3.0.1",
58
+ "@middy/util": "3.0.4",
59
59
  "negotiator": "0.6.3"
60
60
  },
61
61
  "devDependencies": {
62
- "@middy/core": "^3.0.1"
62
+ "@middy/core": "3.0.4"
63
63
  },
64
- "gitHead": "797455e2c2be445867bc03597e0a2d5b0560c9de"
64
+ "gitHead": "3e9bc83e791f943c71cd7003fc27f0a3692d83a1"
65
65
  }