@middy/http-content-negotiation 5.0.0-alpha.0 → 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.
package/README.md CHANGED
@@ -19,8 +19,9 @@
19
19
  <a href="https://snyk.io/test/github/middyjs/middy">
20
20
  <img src="https://snyk.io/test/github/middyjs/middy/badge.svg" alt="Known Vulnerabilities" data-canonical-src="https://snyk.io/test/github/middyjs/middy" style="max-width:100%;">
21
21
  </a>
22
- <a href="https://lgtm.com/projects/g/middyjs/middy/context:javascript">
23
- <img src="https://img.shields.io/lgtm/grade/javascript/g/middyjs/middy.svg?logo=lgtm&logoWidth=18" alt="Language grade: JavaScript" style="max-width:100%;">
22
+ <a href="https://github.com/middyjs/middy/actions/workflows/sast.yml">
23
+ <img src="https://github.com/middyjs/middy/actions/workflows/sast.yml/badge.svg
24
+ ?branch=main&event=push" alt="CodeQL" style="max-width:100%;">
24
25
  </a>
25
26
  <a href="https://bestpractices.coreinfrastructure.org/projects/5280">
26
27
  <img src="https://bestpractices.coreinfrastructure.org/projects/5280/badge" alt="Core Infrastructure Initiative (CII) Best Practices" style="max-width:100%;">
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,63 +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
- 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];
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
+ )
57
46
  }
58
- if (failOnMismatch && event[resultName] === undefined) {
59
- 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
+ )
60
70
  }
61
- };
62
- export default httpContentNegotiationMiddleware;
63
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@middy/http-content-negotiation",
3
- "version": "5.0.0-alpha.0",
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": {
@@ -10,24 +10,18 @@
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": "5.0.0-alpha.0",
63
+ "@middy/util": "5.0.0-alpha.1",
70
64
  "negotiator": "0.6.3"
71
65
  },
72
66
  "devDependencies": {
73
- "@middy/core": "5.0.0-alpha.0"
67
+ "@middy/core": "5.0.0-alpha.1"
74
68
  },
75
- "gitHead": "08c35e3dba9efdad0b86666ce206ce302cc65d07"
69
+ "gitHead": "ebce8d5df8783077fa49ba62ee9be20e8486a7f1"
76
70
  }
package/index.cjs DELETED
@@ -1,76 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(module, "exports", {
6
- enumerable: true,
7
- get: ()=>_default
8
- });
9
- const _charsetJs = _interopRequireDefault(require("negotiator/lib/charset.js"));
10
- const _encodingJs = _interopRequireDefault(require("negotiator/lib/encoding.js"));
11
- const _languageJs = _interopRequireDefault(require("negotiator/lib/language.js"));
12
- const _mediaTypeJs = _interopRequireDefault(require("negotiator/lib/mediaType.js"));
13
- const _util = require("@middy/util");
14
- function _interopRequireDefault(obj) {
15
- return obj && obj.__esModule ? obj : {
16
- default: obj
17
- };
18
- }
19
- const parseFn = {
20
- Charset: _charsetJs.default,
21
- Encoding: _encodingJs.default,
22
- Language: _languageJs.default,
23
- MediaType: _mediaTypeJs.default
24
- };
25
- const defaults = {
26
- parseCharsets: true,
27
- availableCharsets: undefined,
28
- parseEncodings: true,
29
- availableEncodings: undefined,
30
- parseLanguages: true,
31
- availableLanguages: undefined,
32
- defaultToFirstLanguage: false,
33
- parseMediaTypes: true,
34
- availableMediaTypes: undefined,
35
- failOnMismatch: true
36
- };
37
- const httpContentNegotiationMiddleware = (opts = {})=>{
38
- const options = {
39
- ...defaults,
40
- ...opts
41
- };
42
- const httpContentNegotiationMiddlewareBefore = async (request)=>{
43
- const { event } = request;
44
- if (!event.headers) return;
45
- if (options.parseCharsets) {
46
- parseHeader('Accept-Charset', 'Charset', options.availableCharsets, options.defaultToFirstCharset, options.failOnMismatch, event);
47
- }
48
- if (options.parseEncodings) {
49
- parseHeader('Accept-Encoding', 'Encoding', options.availableEncodings, options.defaultToFirstEncoding, options.failOnMismatch, event);
50
- }
51
- if (options.parseLanguages) {
52
- parseHeader('Accept-Language', 'Language', options.availableLanguages, options.defaultToFirstLanguage, options.failOnMismatch, event);
53
- }
54
- if (options.parseMediaTypes) {
55
- parseHeader('Accept', 'MediaType', options.availableMediaTypes, options.defaultToFirstMediaType, options.failOnMismatch, event);
56
- }
57
- };
58
- return {
59
- before: httpContentNegotiationMiddlewareBefore
60
- };
61
- };
62
- const parseHeader = (headerName, type, availableValues, defaultToFirstValue, failOnMismatch, event)=>{
63
- const resultsName = `preferred${type}s`;
64
- const resultName = `preferred${type}`;
65
- const headerValue = event.headers[headerName] ?? event.headers[headerName.toLowerCase()];
66
- event[resultsName] = parseFn[type](headerValue, availableValues);
67
- event[resultName] = event[resultsName][0];
68
- if (defaultToFirstValue && event[resultName] === undefined) {
69
- event[resultName] = availableValues[0];
70
- }
71
- if (failOnMismatch && event[resultName] === undefined) {
72
- throw (0, _util.createError)(406, `Unsupported ${type}. Acceptable values: ${availableValues.join(', ')}`);
73
- }
74
- };
75
- const _default = httpContentNegotiationMiddleware;
76
-