@middy/http-content-negotiation 4.6.5 → 5.0.0-alpha.1

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.
Files changed (4) hide show
  1. package/index.d.ts +4 -1
  2. package/index.js +115 -62
  3. package/package.json +5 -11
  4. package/index.cjs +0 -82
package/index.d.ts CHANGED
@@ -12,7 +12,10 @@ interface Options {
12
12
  failOnMismatch?: boolean
13
13
  }
14
14
 
15
- export interface Event {
15
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface
16
+ export interface Event {}
17
+
18
+ export interface Context {
16
19
  preferredCharsets: string[]
17
20
  preferredCharset: string
18
21
  preferredEncodings: string[]
package/index.js CHANGED
@@ -1,67 +1,120 @@
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';
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
+
6
7
  const parseFn = {
7
- Charset: charset,
8
- Encoding: encoding,
9
- Language: language,
10
- MediaType: mediaType
11
- };
8
+ Charset: charset,
9
+ Encoding: encoding,
10
+ Language: language,
11
+ MediaType: mediaType
12
+ }
13
+
12
14
  const defaults = {
13
- parseCharsets: true,
14
- availableCharsets: undefined,
15
- // defaultToFirstCharset: false, // Should not be used
16
- parseEncodings: true,
17
- availableEncodings: undefined,
18
- // defaultToFirstEncoding: false, // Should not be used
19
- parseLanguages: true,
20
- availableLanguages: undefined,
21
- defaultToFirstLanguage: false,
22
- parseMediaTypes: true,
23
- availableMediaTypes: undefined,
24
- // defaultToFirstMediaType: false, // Should not be used
25
- failOnMismatch: true
26
- };
27
- const httpContentNegotiationMiddleware = (opts = {})=>{
28
- const options = {
29
- ...defaults,
30
- ...opts
31
- };
32
- const httpContentNegotiationMiddlewareBefore = async (request)=>{
33
- const { event } = request;
34
- if (!event.headers) return;
35
- if (options.parseCharsets) {
36
- parseHeader('Accept-Charset', 'Charset', options.availableCharsets, options.defaultToFirstCharset, options.failOnMismatch, event);
37
- }
38
- if (options.parseEncodings) {
39
- parseHeader('Accept-Encoding', 'Encoding', options.availableEncodings, options.defaultToFirstEncoding, options.failOnMismatch, event);
40
- }
41
- if (options.parseLanguages) {
42
- parseHeader('Accept-Language', 'Language', options.availableLanguages, options.defaultToFirstLanguage, options.failOnMismatch, event);
43
- }
44
- if (options.parseMediaTypes) {
45
- parseHeader('Accept', 'MediaType', options.availableMediaTypes, options.defaultToFirstMediaType, options.failOnMismatch, event);
46
- }
47
- };
48
- return {
49
- before: httpContentNegotiationMiddlewareBefore
50
- };
51
- };
52
- const parseHeader = (headerName, type, availableValues, defaultToFirstValue, failOnMismatch, event)=>{
53
- const resultsName = `preferred${type}s`;
54
- const resultName = `preferred${type}`;
55
- const headerValue = event.headers[headerName] ?? event.headers[headerName.toLowerCase()];
56
- event[resultsName] = parseFn[type](headerValue, availableValues);
57
- event[resultName] = event[resultsName][0];
58
- if (defaultToFirstValue && event[resultName] === undefined) {
59
- event[resultName] = availableValues[0];
15
+ parseCharsets: true,
16
+ availableCharsets: undefined,
17
+ // defaultToFirstCharset: false, // Should not be used
18
+ parseEncodings: true,
19
+ availableEncodings: undefined,
20
+ // defaultToFirstEncoding: false, // Should not be used
21
+ parseLanguages: true,
22
+ availableLanguages: undefined,
23
+ // defaultToFirstLanguage: false, // Should not be used
24
+ parseMediaTypes: true,
25
+ availableMediaTypes: undefined,
26
+ // defaultToFirstMediaType: false, // Should not be used
27
+ failOnMismatch: true
28
+ }
29
+
30
+ const httpContentNegotiationMiddleware = (opts = {}) => {
31
+ const options = { ...defaults, ...opts }
32
+
33
+ const httpContentNegotiationMiddlewareBefore = async (request) => {
34
+ const { event, context } = request
35
+ if (!event.headers) return
36
+ if (options.parseCharsets) {
37
+ parseHeader(
38
+ 'Accept-Charset',
39
+ 'Charset',
40
+ options.availableCharsets,
41
+ options.defaultToFirstCharset,
42
+ options.failOnMismatch,
43
+ event,
44
+ context
45
+ )
60
46
  }
61
- if (failOnMismatch && event[resultName] === undefined) {
62
- // NotAcceptable
63
- throw createError(406, `Unsupported ${type}. Acceptable values: ${availableValues.join(', ')}`);
47
+
48
+ if (options.parseEncodings) {
49
+ parseHeader(
50
+ 'Accept-Encoding',
51
+ 'Encoding',
52
+ options.availableEncodings,
53
+ options.defaultToFirstEncoding,
54
+ options.failOnMismatch,
55
+ event,
56
+ context
57
+ )
58
+ }
59
+
60
+ if (options.parseLanguages) {
61
+ parseHeader(
62
+ 'Accept-Language',
63
+ 'Language',
64
+ options.availableLanguages,
65
+ options.defaultToFirstLanguage,
66
+ options.failOnMismatch,
67
+ event,
68
+ context
69
+ )
64
70
  }
65
- };
66
- export default httpContentNegotiationMiddleware;
67
71
 
72
+ if (options.parseMediaTypes) {
73
+ parseHeader(
74
+ 'Accept',
75
+ 'MediaType',
76
+ options.availableMediaTypes,
77
+ options.defaultToFirstMediaType,
78
+ options.failOnMismatch,
79
+ event,
80
+ context
81
+ )
82
+ }
83
+ }
84
+
85
+ return {
86
+ before: httpContentNegotiationMiddlewareBefore
87
+ }
88
+ }
89
+
90
+ const parseHeader = (
91
+ headerName,
92
+ type,
93
+ availableValues,
94
+ defaultToFirstValue,
95
+ failOnMismatch,
96
+ event,
97
+ context
98
+ ) => {
99
+ const resultsName = `preferred${type}s`
100
+ const resultName = `preferred${type}`
101
+ const headerValue =
102
+ event.headers[headerName] ?? event.headers[headerName.toLowerCase()]
103
+
104
+ context[resultsName] = parseFn[type](headerValue, availableValues)
105
+ context[resultName] = context[resultsName][0]
106
+
107
+ if (defaultToFirstValue && context[resultName] === undefined) {
108
+ context[resultName] = availableValues[0]
109
+ }
110
+ if (failOnMismatch && context[resultName] === undefined) {
111
+ // NotAcceptable
112
+ throw createError(
113
+ 406,
114
+ `Unsupported ${type}. Acceptable values: ${availableValues.join(', ')}`,
115
+ { cause: { package: '@middy/http-content-negotiation' } }
116
+ )
117
+ }
118
+ }
119
+
120
+ export default httpContentNegotiationMiddleware
package/package.json CHANGED
@@ -1,33 +1,27 @@
1
1
  {
2
2
  "name": "@middy/http-content-negotiation",
3
- "version": "4.6.5",
3
+ "version": "5.0.0-alpha.1",
4
4
  "description": "Http content negotiation middleware for the middy framework",
5
5
  "type": "module",
6
6
  "engines": {
7
- "node": ">=16"
7
+ "node": ">=18"
8
8
  },
9
9
  "engineStrict": true,
10
10
  "publishConfig": {
11
11
  "access": "public"
12
12
  },
13
- "main": "./index.cjs",
14
13
  "module": "./index.js",
15
14
  "exports": {
16
15
  ".": {
17
16
  "import": {
18
17
  "types": "./index.d.ts",
19
18
  "default": "./index.js"
20
- },
21
- "require": {
22
- "types": "./index.d.ts",
23
- "default": "./index.cjs"
24
19
  }
25
20
  }
26
21
  },
27
22
  "types": "index.d.ts",
28
23
  "files": [
29
24
  "index.js",
30
- "index.cjs",
31
25
  "index.d.ts"
32
26
  ],
33
27
  "scripts": {
@@ -66,11 +60,11 @@
66
60
  "url": "https://github.com/sponsors/willfarrell"
67
61
  },
68
62
  "dependencies": {
69
- "@middy/util": "4.6.5",
63
+ "@middy/util": "5.0.0-alpha.1",
70
64
  "negotiator": "0.6.3"
71
65
  },
72
66
  "devDependencies": {
73
- "@middy/core": "4.6.5"
67
+ "@middy/core": "5.0.0-alpha.1"
74
68
  },
75
- "gitHead": "573d7b0bb243d8c5a9bcb00cf29d031aa7a0c606"
69
+ "gitHead": "ebce8d5df8783077fa49ba62ee9be20e8486a7f1"
76
70
  }
package/index.cjs DELETED
@@ -1,82 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(module, "exports", {
6
- enumerable: true,
7
- get: function() {
8
- return _default;
9
- }
10
- });
11
- const _charset = /*#__PURE__*/ _interop_require_default(require("negotiator/lib/charset.js"));
12
- const _encoding = /*#__PURE__*/ _interop_require_default(require("negotiator/lib/encoding.js"));
13
- const _language = /*#__PURE__*/ _interop_require_default(require("negotiator/lib/language.js"));
14
- const _mediaType = /*#__PURE__*/ _interop_require_default(require("negotiator/lib/mediaType.js"));
15
- const _util = require("@middy/util");
16
- function _interop_require_default(obj) {
17
- return obj && obj.__esModule ? obj : {
18
- default: obj
19
- };
20
- }
21
- const parseFn = {
22
- Charset: _charset.default,
23
- Encoding: _encoding.default,
24
- Language: _language.default,
25
- MediaType: _mediaType.default
26
- };
27
- const defaults = {
28
- parseCharsets: true,
29
- availableCharsets: undefined,
30
- // defaultToFirstCharset: false, // Should not be used
31
- parseEncodings: true,
32
- availableEncodings: undefined,
33
- // defaultToFirstEncoding: false, // Should not be used
34
- parseLanguages: true,
35
- availableLanguages: undefined,
36
- defaultToFirstLanguage: false,
37
- parseMediaTypes: true,
38
- availableMediaTypes: undefined,
39
- // defaultToFirstMediaType: false, // Should not be used
40
- failOnMismatch: true
41
- };
42
- const httpContentNegotiationMiddleware = (opts = {})=>{
43
- const options = {
44
- ...defaults,
45
- ...opts
46
- };
47
- const httpContentNegotiationMiddlewareBefore = async (request)=>{
48
- const { event } = request;
49
- if (!event.headers) return;
50
- if (options.parseCharsets) {
51
- parseHeader('Accept-Charset', 'Charset', options.availableCharsets, options.defaultToFirstCharset, options.failOnMismatch, event);
52
- }
53
- if (options.parseEncodings) {
54
- parseHeader('Accept-Encoding', 'Encoding', options.availableEncodings, options.defaultToFirstEncoding, options.failOnMismatch, event);
55
- }
56
- if (options.parseLanguages) {
57
- parseHeader('Accept-Language', 'Language', options.availableLanguages, options.defaultToFirstLanguage, options.failOnMismatch, event);
58
- }
59
- if (options.parseMediaTypes) {
60
- parseHeader('Accept', 'MediaType', options.availableMediaTypes, options.defaultToFirstMediaType, options.failOnMismatch, event);
61
- }
62
- };
63
- return {
64
- before: httpContentNegotiationMiddlewareBefore
65
- };
66
- };
67
- const parseHeader = (headerName, type, availableValues, defaultToFirstValue, failOnMismatch, event)=>{
68
- const resultsName = `preferred${type}s`;
69
- const resultName = `preferred${type}`;
70
- const headerValue = event.headers[headerName] ?? event.headers[headerName.toLowerCase()];
71
- event[resultsName] = parseFn[type](headerValue, availableValues);
72
- event[resultName] = event[resultsName][0];
73
- if (defaultToFirstValue && event[resultName] === undefined) {
74
- event[resultName] = availableValues[0];
75
- }
76
- if (failOnMismatch && event[resultName] === undefined) {
77
- // NotAcceptable
78
- throw (0, _util.createError)(406, `Unsupported ${type}. Acceptable values: ${availableValues.join(', ')}`);
79
- }
80
- };
81
- const _default = httpContentNegotiationMiddleware;
82
-