Page Menu
Home
Sealhub
Search
Configure Global Search
Log In
Files
F12655896
parse-body.ts
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
2 KB
Referenced Files
None
Subscribers
None
parse-body.ts
View Options
import
type
{
Middleware
}
from
"@koa/router"
;
import
{
promises
as
fs
}
from
"fs"
;
import
koaBody
from
"koa-body"
;
import
File
from
"../data-structures/file"
;
import
{
ValidationError
}
from
"../response/errors"
;
import
dotProp
from
"dot-prop"
;
function
setDeep
(
target
:
Record
<
string
,
unknown
>
,
complex_key
:
string
,
value
:
unknown
)
{
dotProp
.
set
(
target
,
complex_key
.
replaceAll
(
"["
,
"."
).
replaceAll
(
"]"
,
""
),
value
);
}
export
default
function
parseBody
()
:
Middleware
{
const
koaParser
=
koaBody
({
multipart
:
true
});
return
async
(
ctx
,
next
)
=>
{
await
koaParser
(
ctx
,
()
=>
Promise
.
resolve
());
const
original_body
=
ctx
.
request
.
body
||
{};
ctx
.
request
.
body
=
{};
const
promises
:
Promise
<
void
>
[]
=
[];
if
(
ctx
.
request
.
files
)
{
for
(
const
file_name
in
ctx
.
request
.
files
)
{
let
files
=
ctx
.
request
.
files
[
file_name
];
if
(
!
Array
.
isArray
(
files
))
{
if
(
files
.
type
===
"application/json"
&&
files
.
name
===
"blob"
)
{
promises
.
push
(
fs
.
readFile
(
files
.
path
,
"utf-8"
)
.
then
((
json_str
)
=>
setDeep
(
ctx
.
request
.
body
,
file_name
,
JSON
.
parse
(
json_str
)
)
)
);
continue
;
}
else
{
files
=
[
files
];
}
}
const
file_promises
=
files
.
map
(
async
(
file
)
=>
{
const
extracted_filename
=
file
.
name
;
if
(
extracted_filename
)
{
return
File
.
fromPath
(
ctx
.
$app
,
file
.
path
,
extracted_filename
);
}
});
promises
.
push
(
Promise
.
all
(
file_promises
).
then
((
sealious_files
)
=>
{
setDeep
(
ctx
.
request
.
body
,
file_name
,
sealious_files
);
})
);
}
}
for
(
const
[
key
,
value
]
of
Object
.
entries
(
original_body
))
{
setDeep
(
ctx
.
request
.
body
,
key
,
value
);
}
for
(
const
[
key
,
value
]
of
Object
.
entries
(
ctx
.
query
))
{
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
if
(
ctx
.
request
.
body
[
key
]
===
undefined
)
{
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
setDeep
(
ctx
.
request
.
body
,
key
,
value
);
}
}
await
Promise
.
all
(
promises
);
ctx
.
$app
.
Logger
.
info
(
"REQUEST"
,
"Parsed body"
,
ctx
.
request
.
body
);
ctx
.
$body
=
ctx
.
request
.
body
;
await
next
();
};
}
File Metadata
Details
Attached
Mime Type
text/x-java
Expires
Fri, Nov 28, 15:07 (1 d, 20 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1034889
Default Alt Text
parse-body.ts (2 KB)
Attached To
Mode
rS Sealious
Attached
Detach File
Event Timeline
Log In to Comment