@fluojs/platform-fastify 1.0.0-beta.6 → 1.0.0-beta.7
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/adapter.d.ts.map +1 -1
- package/dist/adapter.js +11 -100
- package/package.json +3 -3
package/dist/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,IAAI,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAOtE,OAAO,EAOL,KAAK,WAAW,EAChB,KAAK,UAAU,EAIf,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC5B,MAAM,cAAc,CAAC;AAOtB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter.js
CHANGED
|
@@ -4,6 +4,7 @@ import fastify from 'fastify';
|
|
|
4
4
|
import { createServerBackedHttpAdapterRealtimeCapability, createErrorResponse, HttpException, InternalServerErrorException, PayloadTooLargeException } from '@fluojs/http';
|
|
5
5
|
import { attachFrameworkRequestNativeRouteHandoff, bindRawRequestNativeRouteHandoff, consumeRawRequestNativeRouteHandoff, isRoutePathNormalizationSensitive } from '@fluojs/http/internal';
|
|
6
6
|
import { createNodeShutdownSignalRegistration, defaultNodeShutdownSignals } from '@fluojs/runtime/node';
|
|
7
|
+
import { cloneHeaderValue, createDeferredFrameworkRequestShell, createMemoizedAsyncValue, createMemoizedValue, parseQueryParamsFromSearch, snapshotSimpleQueryRecord, splitRawRequestUrl } from '@fluojs/runtime/internal-node';
|
|
7
8
|
import { bootstrapHttpAdapterApplication, runHttpAdapterApplication } from '@fluojs/runtime/internal/http-adapter';
|
|
8
9
|
import { dispatchWithRequestResponseFactory } from '@fluojs/runtime/internal/request-response-factory';
|
|
9
10
|
|
|
@@ -395,10 +396,9 @@ function createDeferredFrameworkRequest(request, signal, multipartOptions, maxBo
|
|
|
395
396
|
const urlParts = splitRawRequestUrl(rawUrl);
|
|
396
397
|
const headerSnapshot = cloneRequestHeaders(request.headers);
|
|
397
398
|
const headers = createMemoizedValue(() => normalizeHeaders(headerSnapshot));
|
|
398
|
-
const
|
|
399
|
-
const cookies = createMemoizedValue(() => parseCookieHeader(cookieHeader));
|
|
400
|
-
const query = createMemoizedValue(() => parseQueryParamsFromSearch(urlParts.search));
|
|
399
|
+
const querySnapshot = snapshotSimpleQueryRecord(request.query);
|
|
401
400
|
const isMultipart = isMultipartRequestContentType(headerSnapshot['content-type']);
|
|
401
|
+
let frameworkRequest;
|
|
402
402
|
const materializeBody = createMemoizedAsyncValue(async () => {
|
|
403
403
|
let body = request.body;
|
|
404
404
|
let files;
|
|
@@ -421,24 +421,18 @@ function createDeferredFrameworkRequest(request, signal, multipartOptions, maxBo
|
|
|
421
421
|
}
|
|
422
422
|
}
|
|
423
423
|
});
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
get headers() {
|
|
429
|
-
return headers();
|
|
430
|
-
},
|
|
424
|
+
frameworkRequest = createDeferredFrameworkRequestShell({
|
|
425
|
+
cookieHeader: cloneHeaderValue(headerSnapshot.cookie),
|
|
426
|
+
headersFactory: headers,
|
|
427
|
+
materializeBody,
|
|
431
428
|
method: request.method,
|
|
432
|
-
params: {},
|
|
433
429
|
path: urlParts.path,
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
},
|
|
430
|
+
query: querySnapshot,
|
|
431
|
+
queryFactory: () => parseQueryParamsFromSearch(urlParts.search),
|
|
437
432
|
raw: request.raw,
|
|
438
433
|
signal,
|
|
439
|
-
url: urlParts.path + urlParts.search
|
|
440
|
-
|
|
441
|
-
};
|
|
434
|
+
url: urlParts.path + urlParts.search
|
|
435
|
+
});
|
|
442
436
|
const nativeRouteHandoff = consumeRawRequestNativeRouteHandoff(request.raw);
|
|
443
437
|
return nativeRouteHandoff ? attachFrameworkRequestNativeRouteHandoff(frameworkRequest, nativeRouteHandoff) : frameworkRequest;
|
|
444
438
|
}
|
|
@@ -568,92 +562,9 @@ function normalizeHeaders(headers) {
|
|
|
568
562
|
}
|
|
569
563
|
return normalized;
|
|
570
564
|
}
|
|
571
|
-
function parseQueryParamsFromSearch(search) {
|
|
572
|
-
return parseQueryParams(new URLSearchParams(search));
|
|
573
|
-
}
|
|
574
|
-
function parseQueryParams(searchParams) {
|
|
575
|
-
const query = {};
|
|
576
|
-
for (const [key, value] of searchParams.entries()) {
|
|
577
|
-
const current = query[key];
|
|
578
|
-
if (current === undefined) {
|
|
579
|
-
query[key] = value;
|
|
580
|
-
continue;
|
|
581
|
-
}
|
|
582
|
-
if (Array.isArray(current)) {
|
|
583
|
-
current.push(value);
|
|
584
|
-
continue;
|
|
585
|
-
}
|
|
586
|
-
query[key] = [current, value];
|
|
587
|
-
}
|
|
588
|
-
return query;
|
|
589
|
-
}
|
|
590
|
-
function parseCookieHeader(cookieHeader) {
|
|
591
|
-
const normalizedCookieHeader = Array.isArray(cookieHeader) ? cookieHeader.join('; ') : cookieHeader;
|
|
592
|
-
if (!normalizedCookieHeader) {
|
|
593
|
-
return {};
|
|
594
|
-
}
|
|
595
|
-
return Object.fromEntries(normalizedCookieHeader.split(';').map(pair => pair.trim()).filter(Boolean).map(pair => {
|
|
596
|
-
const index = pair.indexOf('=');
|
|
597
|
-
if (index === -1) {
|
|
598
|
-
return [pair.trim(), ''];
|
|
599
|
-
}
|
|
600
|
-
const rawValue = pair.slice(index + 1).trim();
|
|
601
|
-
try {
|
|
602
|
-
return [pair.slice(0, index).trim(), decodeURIComponent(rawValue)];
|
|
603
|
-
} catch {
|
|
604
|
-
return [pair.slice(0, index).trim(), rawValue];
|
|
605
|
-
}
|
|
606
|
-
}));
|
|
607
|
-
}
|
|
608
|
-
function createMemoizedValue(factory) {
|
|
609
|
-
let initialized = false;
|
|
610
|
-
let value;
|
|
611
|
-
return () => {
|
|
612
|
-
if (!initialized) {
|
|
613
|
-
value = factory();
|
|
614
|
-
initialized = true;
|
|
615
|
-
}
|
|
616
|
-
return value;
|
|
617
|
-
};
|
|
618
|
-
}
|
|
619
|
-
function createMemoizedAsyncValue(factory) {
|
|
620
|
-
let promise;
|
|
621
|
-
return () => {
|
|
622
|
-
promise ??= factory();
|
|
623
|
-
return promise;
|
|
624
|
-
};
|
|
625
|
-
}
|
|
626
|
-
function cloneHeaderValue(value) {
|
|
627
|
-
return Array.isArray(value) ? [...value] : value;
|
|
628
|
-
}
|
|
629
565
|
function cloneRequestHeaders(headers) {
|
|
630
566
|
return Object.fromEntries(Object.entries(headers).map(([name, value]) => [name, cloneHeaderValue(value)]));
|
|
631
567
|
}
|
|
632
|
-
function splitRawRequestUrl(rawUrl) {
|
|
633
|
-
if (rawUrl.startsWith('http://') || rawUrl.startsWith('https://')) {
|
|
634
|
-
const url = new URL(rawUrl);
|
|
635
|
-
return {
|
|
636
|
-
path: url.pathname,
|
|
637
|
-
search: url.search
|
|
638
|
-
};
|
|
639
|
-
}
|
|
640
|
-
const queryStart = rawUrl.indexOf('?');
|
|
641
|
-
const hashStart = rawUrl.indexOf('#');
|
|
642
|
-
const pathEndCandidates = [queryStart, hashStart].filter(index => index >= 0);
|
|
643
|
-
const pathEnd = pathEndCandidates.length > 0 ? Math.min(...pathEndCandidates) : rawUrl.length;
|
|
644
|
-
const path = rawUrl.slice(0, pathEnd) || '/';
|
|
645
|
-
if (queryStart === -1) {
|
|
646
|
-
return {
|
|
647
|
-
path,
|
|
648
|
-
search: ''
|
|
649
|
-
};
|
|
650
|
-
}
|
|
651
|
-
const searchEnd = hashStart >= 0 && hashStart > queryStart ? hashStart : rawUrl.length;
|
|
652
|
-
return {
|
|
653
|
-
path,
|
|
654
|
-
search: rawUrl.slice(queryStart, searchEnd)
|
|
655
|
-
};
|
|
656
|
-
}
|
|
657
568
|
function setMultiValue(target, key, value) {
|
|
658
569
|
const existing = target[key];
|
|
659
570
|
if (existing === undefined) {
|
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"platform",
|
|
9
9
|
"server"
|
|
10
10
|
],
|
|
11
|
-
"version": "1.0.0-beta.
|
|
11
|
+
"version": "1.0.0-beta.7",
|
|
12
12
|
"private": false,
|
|
13
13
|
"license": "MIT",
|
|
14
14
|
"repository": {
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
"@fastify/multipart": "^9.2.1",
|
|
39
39
|
"fastify": "^5.8.5",
|
|
40
40
|
"fastify-raw-body": "^5.0.0",
|
|
41
|
-
"@fluojs/http": "^1.0.0-beta.
|
|
42
|
-
"@fluojs/runtime": "^1.0.0-beta.
|
|
41
|
+
"@fluojs/http": "^1.0.0-beta.5",
|
|
42
|
+
"@fluojs/runtime": "^1.0.0-beta.7"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"vitest": "^3.2.4",
|