@trojs/openapi-server 1.0.10 → 1.1.0

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@trojs/openapi-server",
3
3
  "description": "OpenAPI Server",
4
- "version": "1.0.10",
4
+ "version": "1.1.0",
5
5
  "author": {
6
6
  "name": "Pieter Wigboldus",
7
7
  "url": "https://trojs.org/"
@@ -24,6 +24,7 @@
24
24
  "src/error-status.js",
25
25
  "src/types.js",
26
26
  "src/params.js",
27
+ "src/formdata.js",
27
28
  "src/express-callback.js",
28
29
  "src/operation-ids.js",
29
30
  "src/handlers/not-found.js",
@@ -35,6 +36,7 @@
35
36
  "devDependencies": {
36
37
  "@hckrnews/eslint-config": "^3.0.0",
37
38
  "@types/express-serve-static-core": "^4.17.41",
39
+ "@types/node": "^20.14.9",
38
40
  "c8": "^10.0.0",
39
41
  "eslint": "^8.23.0",
40
42
  "eslint-config-standard": "^17.1.0",
@@ -60,6 +62,7 @@
60
62
  ],
61
63
  "dependencies": {
62
64
  "@sentry/node": "^7.112.1",
65
+ "@trojs/formdata-parser": "^0.2.0",
63
66
  "ajv-formats": "^3.0.0",
64
67
  "body-parser": "^1.20.2",
65
68
  "compression": "^1.7.4",
@@ -1,5 +1,6 @@
1
1
  import getStatusByError from './error-status.js'
2
2
  import { parseParams } from './params.js'
3
+ import { parseFormData } from './formdata.js'
3
4
 
4
5
  /**
5
6
  * @typedef {import('express-serve-static-core').Request} Request
@@ -41,6 +42,9 @@ export const makeExpressCallback = ({
41
42
  })
42
43
  const url = `${request.protocol}://${request.get('Host')}${request.originalUrl}`
43
44
 
45
+ // @ts-ignore
46
+ const data = request?._readableState?.buffer
47
+ const files = parseFormData(data, request.headers)
44
48
  const responseBody = await controller({
45
49
  context,
46
50
  request,
@@ -50,7 +54,8 @@ export const makeExpressCallback = ({
50
54
  post: request.body,
51
55
  url,
52
56
  logger,
53
- meta
57
+ meta,
58
+ files
54
59
  })
55
60
  logger.debug({
56
61
  url,
@@ -0,0 +1,19 @@
1
+ import formDataParser from '@trojs/formdata-parser'
2
+
3
+ /**
4
+ * @typedef {import('@trojs/formdata-parser').FormData} FormData
5
+ * @typedef {import('node:http').IncomingHttpHeaders} IncomingHttpHeaders
6
+ *
7
+ * Parse form data
8
+ * @param {Buffer|string} data
9
+ * @param {IncomingHttpHeaders} headers
10
+ * @returns {FormData[]}
11
+ */
12
+ export const parseFormData = (data, headers) => {
13
+ const contentType = headers?.['content-type']
14
+ if (contentType?.startsWith('multipart/form-data') && data) {
15
+ const dataString = data.toString('utf8')
16
+ return formDataParser(dataString, contentType)
17
+ }
18
+ return []
19
+ }
package/src/server.js CHANGED
@@ -29,6 +29,7 @@ const getOriginResourcePolicy = (origin) => ({
29
29
  * @typedef {import('./api.js').ApiSchema} ApiSchema
30
30
  * @typedef {import('./api.js').Logger} Logger
31
31
  * @typedef {import('express').Express} Express
32
+ * @typedef {import('@trojs/formdata-parser').FormData} FormData
32
33
  * @typedef {object} Controller
33
34
  * @property {Context=} context
34
35
  * @property {Request=} request
@@ -39,6 +40,7 @@ const getOriginResourcePolicy = (origin) => ({
39
40
  * @property {string=} url
40
41
  * @property {Logger=} logger
41
42
  * @property {object=} meta
43
+ * @property {FormData[]=} files
42
44
  * @typedef {object} SentryConfig
43
45
  * @property {string=} dsn
44
46
  * @property {number=} tracesSampleRate