1+ const { createServer } = require ( 'node:http' )
2+ const { useExpressUploadContext, fileValidatorPlugin } = require ( './packages/file/dist' )
3+
4+ const { Validator, } = require ( './dist' )
5+ const express = require ( 'express' )
6+ const multer = require ( 'multer' )
7+ Validator . use ( fileValidatorPlugin )
8+
9+ async function listenHttpServer ( handler ) {
10+ const server = createServer ( handler )
11+
12+ await new Promise ( ( resolve , reject ) => {
13+ server . once ( 'error' , reject )
14+ server . listen ( 0 , '127.0.0.1' , ( ) => {
15+ server . off ( 'error' , reject )
16+ resolve ( )
17+ } )
18+ } )
19+
20+ const address = server . address ( )
21+
22+ if ( ! address || typeof address === 'string' ) {
23+ throw new Error ( 'Could not determine server address.' )
24+ }
25+
26+ return {
27+ close : async ( ) => {
28+ await new Promise ( ( resolve , reject ) => {
29+ server . close ( error => {
30+ if ( error ) {
31+ reject ( error )
32+ return
33+ }
34+
35+ resolve ( )
36+ } )
37+ } )
38+ } ,
39+ url : `http://127.0.0.1:${ ( address ) . port } ` ,
40+ }
41+ }
42+
43+ const test = async ( ) => {
44+ const app = express ( )
45+ const upload = multer ( { storage : multer . memoryStorage ( ) } )
46+
47+ const png1x1 = Buffer . from (
48+ 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAusB9WlH0b8AAAAASUVORK5CYII=' ,
49+ 'base64' ,
50+ )
51+
52+
53+ app . use ( upload . single ( 'avatar' ) )
54+ app . use ( function ( request , _response , next ) {
55+ useExpressUploadContext ( request )
56+ next ( )
57+ } )
58+
59+ app . post ( '/middleware-required-global' , async function ( _request , response ) {
60+ const validated = await Validator
61+ . make ( { } , { avatar : 'required|file|image|mimes:png' } )
62+ . validate ( )
63+
64+ response . json ( {
65+ hasAvatar : Object . prototype . hasOwnProperty . call ( validated , 'avatar' ) ,
66+ } )
67+ } )
68+
69+
70+ const server = await listenHttpServer ( app )
71+
72+ try {
73+ const formData = new FormData ( )
74+ formData . append ( 'avatar' , new File ( [ png1x1 ] , 'avatar.png' , { type : 'image/png' } ) )
75+
76+ const response = await fetch ( `${ server . url } /middleware-required-global` , {
77+ body : formData ,
78+ method : 'POST' ,
79+ } )
80+
81+ console . log ( await response . text ( ) )
82+ } finally {
83+ await server . close ( )
84+ }
85+ }
86+
87+ test ( ) . catch ( console . error )
0 commit comments