routup 3.1.0 → 3.2.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/dist/index.cjs +95 -96
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +95 -96
- package/dist/index.mjs.map +1 -1
- package/package.json +12 -12
package/dist/index.mjs
CHANGED
|
@@ -842,6 +842,78 @@ function setResponseHeaderContentType(res, input, ifNotExists) {
|
|
|
842
842
|
}
|
|
843
843
|
}
|
|
844
844
|
|
|
845
|
+
async function sendStream(res, stream, next) {
|
|
846
|
+
if (isWebStream(stream)) {
|
|
847
|
+
return stream.pipeTo(new WritableStream({
|
|
848
|
+
write (chunk) {
|
|
849
|
+
res.write(chunk);
|
|
850
|
+
}
|
|
851
|
+
})).then(()=>{
|
|
852
|
+
if (next) {
|
|
853
|
+
return next();
|
|
854
|
+
}
|
|
855
|
+
res.end();
|
|
856
|
+
return Promise.resolve();
|
|
857
|
+
}).catch((err)=>{
|
|
858
|
+
if (next) {
|
|
859
|
+
return next(err);
|
|
860
|
+
}
|
|
861
|
+
return Promise.reject(err);
|
|
862
|
+
});
|
|
863
|
+
}
|
|
864
|
+
return new Promise((resolve, reject)=>{
|
|
865
|
+
stream.on('open', ()=>{
|
|
866
|
+
stream.pipe(res);
|
|
867
|
+
});
|
|
868
|
+
/* istanbul ignore next */ stream.on('error', (err)=>{
|
|
869
|
+
if (next) {
|
|
870
|
+
Promise.resolve().then(()=>next(err)).then(()=>resolve()).catch((e)=>reject(e));
|
|
871
|
+
return;
|
|
872
|
+
}
|
|
873
|
+
res.end();
|
|
874
|
+
reject(err);
|
|
875
|
+
});
|
|
876
|
+
stream.on('close', ()=>{
|
|
877
|
+
if (next) {
|
|
878
|
+
Promise.resolve().then(()=>next()).then(()=>resolve()).catch((e)=>reject(e));
|
|
879
|
+
return;
|
|
880
|
+
}
|
|
881
|
+
res.end();
|
|
882
|
+
resolve();
|
|
883
|
+
});
|
|
884
|
+
});
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
async function sendWebBlob(res, blob) {
|
|
888
|
+
setResponseHeaderContentType(res, blob.type);
|
|
889
|
+
await sendStream(res, blob.stream());
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
async function sendWebResponse(res, webResponse) {
|
|
893
|
+
if (webResponse.redirected) {
|
|
894
|
+
res.setHeader(HeaderName.LOCATION, webResponse.url);
|
|
895
|
+
}
|
|
896
|
+
if (webResponse.status) {
|
|
897
|
+
res.statusCode = webResponse.status;
|
|
898
|
+
}
|
|
899
|
+
if (webResponse.statusText) {
|
|
900
|
+
res.statusMessage = webResponse.statusText;
|
|
901
|
+
}
|
|
902
|
+
webResponse.headers.forEach((value, key)=>{
|
|
903
|
+
if (key === HeaderName.SET_COOKIE) {
|
|
904
|
+
res.appendHeader(key, splitCookiesString(value));
|
|
905
|
+
} else {
|
|
906
|
+
res.setHeader(key, value);
|
|
907
|
+
}
|
|
908
|
+
});
|
|
909
|
+
if (webResponse.body) {
|
|
910
|
+
await sendStream(res, webResponse.body);
|
|
911
|
+
return Promise.resolve();
|
|
912
|
+
}
|
|
913
|
+
res.end();
|
|
914
|
+
return Promise.resolve();
|
|
915
|
+
}
|
|
916
|
+
|
|
845
917
|
async function send(res, chunk) {
|
|
846
918
|
switch(typeof chunk){
|
|
847
919
|
case 'string':
|
|
@@ -853,11 +925,28 @@ async function send(res, chunk) {
|
|
|
853
925
|
case 'number':
|
|
854
926
|
case 'object':
|
|
855
927
|
{
|
|
856
|
-
if (
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
928
|
+
if (chunk !== null) {
|
|
929
|
+
if (chunk instanceof Error) {
|
|
930
|
+
throw chunk;
|
|
931
|
+
}
|
|
932
|
+
if (isStream(chunk)) {
|
|
933
|
+
await sendStream(res, chunk);
|
|
934
|
+
return;
|
|
935
|
+
}
|
|
936
|
+
if (isWebBlob(chunk)) {
|
|
937
|
+
await sendWebBlob(res, chunk);
|
|
938
|
+
return;
|
|
939
|
+
}
|
|
940
|
+
if (isWebResponse(chunk)) {
|
|
941
|
+
await sendWebResponse(res, chunk);
|
|
942
|
+
return;
|
|
943
|
+
}
|
|
944
|
+
if (Buffer.isBuffer(chunk)) {
|
|
945
|
+
setResponseHeaderContentType(res, 'bin', true);
|
|
946
|
+
} else {
|
|
947
|
+
chunk = JSON.stringify(chunk);
|
|
948
|
+
setResponseHeaderContentType(res, 'application/json', true);
|
|
949
|
+
}
|
|
861
950
|
}
|
|
862
951
|
break;
|
|
863
952
|
}
|
|
@@ -940,48 +1029,6 @@ function sendCreated(res, chunk) {
|
|
|
940
1029
|
return send(res, chunk);
|
|
941
1030
|
}
|
|
942
1031
|
|
|
943
|
-
async function sendStream(res, stream, next) {
|
|
944
|
-
if (isWebStream(stream)) {
|
|
945
|
-
return stream.pipeTo(new WritableStream({
|
|
946
|
-
write (chunk) {
|
|
947
|
-
res.write(chunk);
|
|
948
|
-
}
|
|
949
|
-
})).then(()=>{
|
|
950
|
-
if (next) {
|
|
951
|
-
return next();
|
|
952
|
-
}
|
|
953
|
-
res.end();
|
|
954
|
-
return Promise.resolve();
|
|
955
|
-
}).catch((err)=>{
|
|
956
|
-
if (next) {
|
|
957
|
-
return next(err);
|
|
958
|
-
}
|
|
959
|
-
return Promise.reject(err);
|
|
960
|
-
});
|
|
961
|
-
}
|
|
962
|
-
return new Promise((resolve, reject)=>{
|
|
963
|
-
stream.on('open', ()=>{
|
|
964
|
-
stream.pipe(res);
|
|
965
|
-
});
|
|
966
|
-
/* istanbul ignore next */ stream.on('error', (err)=>{
|
|
967
|
-
if (next) {
|
|
968
|
-
Promise.resolve().then(()=>next(err)).then(()=>resolve()).catch((e)=>reject(e));
|
|
969
|
-
return;
|
|
970
|
-
}
|
|
971
|
-
res.end();
|
|
972
|
-
reject(err);
|
|
973
|
-
});
|
|
974
|
-
stream.on('close', ()=>{
|
|
975
|
-
if (next) {
|
|
976
|
-
Promise.resolve().then(()=>next()).then(()=>resolve()).catch((e)=>reject(e));
|
|
977
|
-
return;
|
|
978
|
-
}
|
|
979
|
-
res.end();
|
|
980
|
-
resolve();
|
|
981
|
-
});
|
|
982
|
-
});
|
|
983
|
-
}
|
|
984
|
-
|
|
985
1032
|
async function sendFile(res, options, next) {
|
|
986
1033
|
let stats;
|
|
987
1034
|
try {
|
|
@@ -1071,36 +1118,6 @@ function sendRedirect(res, location, statusCode = 302) {
|
|
|
1071
1118
|
return send(res, html);
|
|
1072
1119
|
}
|
|
1073
1120
|
|
|
1074
|
-
async function sendWebResponse(res, webResponse) {
|
|
1075
|
-
if (webResponse.redirected) {
|
|
1076
|
-
res.setHeader(HeaderName.LOCATION, webResponse.url);
|
|
1077
|
-
}
|
|
1078
|
-
if (webResponse.status) {
|
|
1079
|
-
res.statusCode = webResponse.status;
|
|
1080
|
-
}
|
|
1081
|
-
if (webResponse.statusText) {
|
|
1082
|
-
res.statusMessage = webResponse.statusText;
|
|
1083
|
-
}
|
|
1084
|
-
webResponse.headers.forEach((value, key)=>{
|
|
1085
|
-
if (key === HeaderName.SET_COOKIE) {
|
|
1086
|
-
res.appendHeader(key, splitCookiesString(value));
|
|
1087
|
-
} else {
|
|
1088
|
-
res.setHeader(key, value);
|
|
1089
|
-
}
|
|
1090
|
-
});
|
|
1091
|
-
if (webResponse.body) {
|
|
1092
|
-
await sendStream(res, webResponse.body);
|
|
1093
|
-
return Promise.resolve();
|
|
1094
|
-
}
|
|
1095
|
-
res.end();
|
|
1096
|
-
return Promise.resolve();
|
|
1097
|
-
}
|
|
1098
|
-
|
|
1099
|
-
async function sendWebBlob(res, blob) {
|
|
1100
|
-
setResponseHeaderContentType(res, blob.type);
|
|
1101
|
-
await sendStream(res, blob.stream());
|
|
1102
|
-
}
|
|
1103
|
-
|
|
1104
1121
|
function createResponse(request) {
|
|
1105
1122
|
let output;
|
|
1106
1123
|
let encoding;
|
|
@@ -1246,24 +1263,6 @@ function createResponse(request) {
|
|
|
1246
1263
|
return writable;
|
|
1247
1264
|
}
|
|
1248
1265
|
|
|
1249
|
-
async function sendData(event, chunk) {
|
|
1250
|
-
if (chunk instanceof Error) {
|
|
1251
|
-
return Promise.reject(createError(chunk));
|
|
1252
|
-
}
|
|
1253
|
-
if (isStream(chunk)) {
|
|
1254
|
-
await sendStream(event.response, chunk);
|
|
1255
|
-
return Promise.resolve();
|
|
1256
|
-
}
|
|
1257
|
-
if (isWebBlob(chunk)) {
|
|
1258
|
-
await sendWebBlob(event.response, chunk);
|
|
1259
|
-
return Promise.resolve();
|
|
1260
|
-
}
|
|
1261
|
-
if (isWebResponse(chunk)) {
|
|
1262
|
-
await sendWebResponse(event.response, chunk);
|
|
1263
|
-
return Promise.resolve();
|
|
1264
|
-
}
|
|
1265
|
-
return send(event.response, chunk);
|
|
1266
|
-
}
|
|
1267
1266
|
function dispatch(event, target) {
|
|
1268
1267
|
setRequestParams(event.request, event.params);
|
|
1269
1268
|
setRequestMountPath(event.request, event.mountPath);
|
|
@@ -1297,7 +1296,7 @@ function dispatch(event, target) {
|
|
|
1297
1296
|
handled = true;
|
|
1298
1297
|
unsubscribe();
|
|
1299
1298
|
if (!event.dispatched) {
|
|
1300
|
-
await
|
|
1299
|
+
await send(event.response, data);
|
|
1301
1300
|
}
|
|
1302
1301
|
return true;
|
|
1303
1302
|
};
|