@fluojs/runtime 1.0.0-beta.1 → 1.0.0-beta.3
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/README.ko.md +12 -1
- package/README.md +12 -1
- package/dist/adapters/request-response-factory.d.ts +9 -0
- package/dist/adapters/request-response-factory.d.ts.map +1 -1
- package/dist/adapters/request-response-factory.js +11 -0
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +230 -46
- package/dist/module-graph.d.ts.map +1 -1
- package/dist/module-graph.js +17 -7
- package/dist/node/internal-node-request.d.ts +21 -0
- package/dist/node/internal-node-request.d.ts.map +1 -1
- package/dist/node/internal-node-request.js +84 -30
- package/dist/node/internal-node.d.ts.map +1 -1
- package/dist/node/internal-node.js +5 -2
- package/dist/node/node-request.d.ts +1 -1
- package/dist/node/node-request.d.ts.map +1 -1
- package/dist/node/node-request.js +1 -1
- package/dist/platform-shell.d.ts +4 -0
- package/dist/platform-shell.d.ts.map +1 -1
- package/dist/platform-shell.js +72 -20
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/web.d.ts.map +1 -1
- package/dist/web.js +90 -29
- package/package.json +6 -6
package/dist/module-graph.js
CHANGED
|
@@ -132,7 +132,9 @@ function compileModule(moduleType, runtimeProviderTokens, compiled = new Map(),
|
|
|
132
132
|
const compiledModule = {
|
|
133
133
|
type: moduleType,
|
|
134
134
|
definition,
|
|
135
|
+
accessibleTokens: new Set(),
|
|
135
136
|
exportedTokens: new Set(),
|
|
137
|
+
importedExportedTokens: new Set(),
|
|
136
138
|
providerTokens
|
|
137
139
|
};
|
|
138
140
|
compiled.set(moduleType, compiledModule);
|
|
@@ -154,11 +156,21 @@ function resolveImportedModules(compiledModule, compiledByType) {
|
|
|
154
156
|
});
|
|
155
157
|
}
|
|
156
158
|
function createImportedExportedTokenSet(importedModules) {
|
|
157
|
-
|
|
159
|
+
const importedExportedTokens = new Set();
|
|
160
|
+
for (const importedModule of importedModules) {
|
|
161
|
+
for (const token of importedModule.exportedTokens) {
|
|
162
|
+
importedExportedTokens.add(token);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return importedExportedTokens;
|
|
158
166
|
}
|
|
159
167
|
function createAccessibleTokenSet(runtimeProviderTokens, moduleProviderTokens, importedExportedTokens, globalExportedTokens) {
|
|
160
168
|
return new Set([...runtimeProviderTokens, ...moduleProviderTokens, ...importedExportedTokens, ...globalExportedTokens]);
|
|
161
169
|
}
|
|
170
|
+
function memoizeAccessibleTokenSet(compiledModule, importedModules, runtimeProviderTokens, globalExportedTokens) {
|
|
171
|
+
compiledModule.importedExportedTokens = createImportedExportedTokenSet(importedModules);
|
|
172
|
+
compiledModule.accessibleTokens = createAccessibleTokenSet(runtimeProviderTokens, compiledModule.providerTokens, compiledModule.importedExportedTokens, globalExportedTokens);
|
|
173
|
+
}
|
|
162
174
|
function validateProviderVisibility(compiledModule, scope, accessibleTokens) {
|
|
163
175
|
for (const provider of compiledModule.definition.providers ?? []) {
|
|
164
176
|
validateProviderInjectionMetadata(provider, scope);
|
|
@@ -222,12 +234,10 @@ function validateCompiledModules(modules, runtimeProviders, runtimeProviderToken
|
|
|
222
234
|
}
|
|
223
235
|
for (const compiledModule of modules) {
|
|
224
236
|
const scope = `module ${compiledModule.type.name}`;
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
validateControllerVisibility(compiledModule, scope, accessibleTokens);
|
|
230
|
-
compiledModule.exportedTokens = createExportedTokenSet(compiledModule, importedExportedTokens);
|
|
237
|
+
memoizeAccessibleTokenSet(compiledModule, resolveImportedModules(compiledModule, compiledByType), runtimeProviderTokens, globalExportedTokens);
|
|
238
|
+
validateProviderVisibility(compiledModule, scope, compiledModule.accessibleTokens);
|
|
239
|
+
validateControllerVisibility(compiledModule, scope, compiledModule.accessibleTokens);
|
|
240
|
+
compiledModule.exportedTokens = createExportedTokenSet(compiledModule, compiledModule.importedExportedTokens);
|
|
231
241
|
}
|
|
232
242
|
}
|
|
233
243
|
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { IncomingHttpHeaders, IncomingMessage, ServerResponse } from 'node:http';
|
|
2
2
|
import { PayloadTooLargeException, type FrameworkRequest } from '@fluojs/http';
|
|
3
3
|
import { type MultipartOptions } from '../multipart.js';
|
|
4
|
+
/**
|
|
5
|
+
* HTTP payload-size error that closes the underlying Node request stream after the response commits.
|
|
6
|
+
*/
|
|
4
7
|
export declare class NodeRequestPayloadTooLargeException extends PayloadTooLargeException {
|
|
5
8
|
private readonly request;
|
|
6
9
|
constructor(request: IncomingMessage);
|
|
@@ -17,6 +20,24 @@ export declare class NodeRequestPayloadTooLargeException extends PayloadTooLarge
|
|
|
17
20
|
* @returns The normalized framework request used by the dispatcher.
|
|
18
21
|
*/
|
|
19
22
|
export declare function createFrameworkRequest(request: IncomingMessage, signal: AbortSignal, multipartOptions?: MultipartOptions, maxBodySize?: number, preserveRawBody?: boolean): Promise<FrameworkRequest>;
|
|
23
|
+
/**
|
|
24
|
+
* Creates the cheap Node framework request shell before consuming the body stream.
|
|
25
|
+
*
|
|
26
|
+
* @param request - Raw Node request carrying headers, URL, and body stream.
|
|
27
|
+
* @param signal - Abort signal tied to the response lifecycle.
|
|
28
|
+
* @param multipartOptions - Multipart parser options applied when materializing multipart requests.
|
|
29
|
+
* @param maxBodySize - Maximum allowed non-multipart body size in bytes.
|
|
30
|
+
* @param preserveRawBody - Whether materialization should retain raw request body bytes.
|
|
31
|
+
* @returns The framework request shell with metadata snapshotted and body materialization deferred.
|
|
32
|
+
*/
|
|
33
|
+
export declare function createDeferredFrameworkRequest(request: IncomingMessage, signal: AbortSignal, multipartOptions?: MultipartOptions, maxBodySize?: number, preserveRawBody?: boolean): FrameworkRequest;
|
|
34
|
+
/**
|
|
35
|
+
* Materializes a deferred Node framework request body exactly once.
|
|
36
|
+
*
|
|
37
|
+
* @param request - Framework request returned by {@link createDeferredFrameworkRequest}.
|
|
38
|
+
* @returns A promise that settles after body, rawBody, and files fields are populated when applicable.
|
|
39
|
+
*/
|
|
40
|
+
export declare function materializeFrameworkRequestBody(request: FrameworkRequest): Promise<void>;
|
|
20
41
|
/**
|
|
21
42
|
* Creates an abort signal that fires when the Node response closes unexpectedly.
|
|
22
43
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal-node-request.d.ts","sourceRoot":"","sources":["../../src/node/internal-node-request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EACf,cAAc,EACf,MAAM,WAAW,CAAC;AAInB,OAAO,EAEL,wBAAwB,EACxB,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAEL,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"internal-node-request.d.ts","sourceRoot":"","sources":["../../src/node/internal-node-request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EACf,cAAc,EACf,MAAM,WAAW,CAAC;AAInB,OAAO,EAEL,wBAAwB,EACxB,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAEL,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAC;AAUzB;;GAEG;AACH,qBAAa,mCAAoC,SAAQ,wBAAwB;IACnE,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,eAAe;IAIrD,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CAahD;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,WAAW,EACnB,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,WAAW,SAAkB,EAC7B,eAAe,UAAQ,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAW3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,WAAW,EACnB,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,WAAW,SAAkB,EAC7B,eAAe,UAAQ,GACtB,gBAAgB,CAsDlB;AAED;;;;;GAKG;AACH,wBAAsB,+BAA+B,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9F;AAyBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,WAAW,CAezE;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,GAAG,SAAS,CAG5F"}
|
|
@@ -2,6 +2,9 @@ import { Readable } from 'node:stream';
|
|
|
2
2
|
import { URL } from 'node:url';
|
|
3
3
|
import { BadRequestException, PayloadTooLargeException } from '@fluojs/http';
|
|
4
4
|
import { parseMultipart } from '../multipart.js';
|
|
5
|
+
/**
|
|
6
|
+
* HTTP payload-size error that closes the underlying Node request stream after the response commits.
|
|
7
|
+
*/
|
|
5
8
|
export class NodeRequestPayloadTooLargeException extends PayloadTooLargeException {
|
|
6
9
|
constructor(request) {
|
|
7
10
|
super('Request body exceeds the size limit.');
|
|
@@ -31,51 +34,99 @@ export class NodeRequestPayloadTooLargeException extends PayloadTooLargeExceptio
|
|
|
31
34
|
* @returns The normalized framework request used by the dispatcher.
|
|
32
35
|
*/
|
|
33
36
|
export async function createFrameworkRequest(request, signal, multipartOptions, maxBodySize = 1 * 1024 * 1024, preserveRawBody = false) {
|
|
37
|
+
const frameworkRequest = createDeferredFrameworkRequest(request, signal, multipartOptions, maxBodySize, preserveRawBody);
|
|
38
|
+
await materializeFrameworkRequestBody(frameworkRequest);
|
|
39
|
+
return frameworkRequest;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Creates the cheap Node framework request shell before consuming the body stream.
|
|
44
|
+
*
|
|
45
|
+
* @param request - Raw Node request carrying headers, URL, and body stream.
|
|
46
|
+
* @param signal - Abort signal tied to the response lifecycle.
|
|
47
|
+
* @param multipartOptions - Multipart parser options applied when materializing multipart requests.
|
|
48
|
+
* @param maxBodySize - Maximum allowed non-multipart body size in bytes.
|
|
49
|
+
* @param preserveRawBody - Whether materialization should retain raw request body bytes.
|
|
50
|
+
* @returns The framework request shell with metadata snapshotted and body materialization deferred.
|
|
51
|
+
*/
|
|
52
|
+
export function createDeferredFrameworkRequest(request, signal, multipartOptions, maxBodySize = 1 * 1024 * 1024, preserveRawBody = false) {
|
|
34
53
|
const url = new URL(request.url ?? '/', 'http://localhost');
|
|
35
54
|
const headers = cloneRequestHeaders(request.headers);
|
|
55
|
+
const cookieHeader = cloneHeaderValue(headers.cookie);
|
|
56
|
+
const searchParams = new URLSearchParams(url.searchParams);
|
|
57
|
+
const cookies = createMemoizedValue(() => parseCookieHeader(cookieHeader));
|
|
58
|
+
const query = createMemoizedValue(() => parseQueryParams(searchParams));
|
|
36
59
|
const contentType = readPrimaryHeaderValue(headers['content-type']);
|
|
37
60
|
const isMultipart = typeof contentType === 'string' && contentType.includes('multipart/form-data');
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
} else {
|
|
61
|
+
const materializeBody = createMemoizedAsyncValue(async () => {
|
|
62
|
+
if (isMultipart) {
|
|
63
|
+
const result = await parseMultipart({
|
|
64
|
+
body: Readable.toWeb(request),
|
|
65
|
+
headers,
|
|
66
|
+
method: request.method,
|
|
67
|
+
url: url.toString()
|
|
68
|
+
}, {
|
|
69
|
+
...multipartOptions,
|
|
70
|
+
maxTotalSize: multipartOptions?.maxTotalSize ?? maxBodySize
|
|
71
|
+
});
|
|
72
|
+
frameworkRequest.body = result.fields;
|
|
73
|
+
frameworkRequest.files = result.files;
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
54
76
|
const bodyResult = await readRequestBody(request, headers['content-type'], maxBodySize, preserveRawBody);
|
|
55
|
-
body = bodyResult.body;
|
|
56
|
-
|
|
57
|
-
|
|
77
|
+
frameworkRequest.body = bodyResult.body;
|
|
78
|
+
if (bodyResult.rawBody) {
|
|
79
|
+
frameworkRequest.rawBody = bodyResult.rawBody;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
58
82
|
const frameworkRequest = {
|
|
59
|
-
|
|
60
|
-
|
|
83
|
+
get cookies() {
|
|
84
|
+
return cookies();
|
|
85
|
+
},
|
|
61
86
|
headers,
|
|
62
87
|
method: request.method ?? 'GET',
|
|
63
88
|
params: {},
|
|
64
89
|
path: url.pathname,
|
|
65
|
-
query
|
|
90
|
+
get query() {
|
|
91
|
+
return query();
|
|
92
|
+
},
|
|
66
93
|
raw: request,
|
|
67
94
|
signal,
|
|
68
|
-
url: url.pathname + url.search
|
|
95
|
+
url: url.pathname + url.search,
|
|
96
|
+
materializeBody
|
|
69
97
|
};
|
|
70
|
-
if (files) {
|
|
71
|
-
frameworkRequest.files = files;
|
|
72
|
-
}
|
|
73
|
-
if (rawBody) {
|
|
74
|
-
frameworkRequest.rawBody = rawBody;
|
|
75
|
-
}
|
|
76
98
|
return frameworkRequest;
|
|
77
99
|
}
|
|
78
100
|
|
|
101
|
+
/**
|
|
102
|
+
* Materializes a deferred Node framework request body exactly once.
|
|
103
|
+
*
|
|
104
|
+
* @param request - Framework request returned by {@link createDeferredFrameworkRequest}.
|
|
105
|
+
* @returns A promise that settles after body, rawBody, and files fields are populated when applicable.
|
|
106
|
+
*/
|
|
107
|
+
export async function materializeFrameworkRequestBody(request) {
|
|
108
|
+
await request.materializeBody?.();
|
|
109
|
+
delete request.materializeBody;
|
|
110
|
+
}
|
|
111
|
+
function createMemoizedValue(factory) {
|
|
112
|
+
let initialized = false;
|
|
113
|
+
let value;
|
|
114
|
+
return () => {
|
|
115
|
+
if (!initialized) {
|
|
116
|
+
value = factory();
|
|
117
|
+
initialized = true;
|
|
118
|
+
}
|
|
119
|
+
return value;
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
function createMemoizedAsyncValue(factory) {
|
|
123
|
+
let promise;
|
|
124
|
+
return () => {
|
|
125
|
+
promise ??= factory();
|
|
126
|
+
return promise;
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
79
130
|
/**
|
|
80
131
|
* Creates an abort signal that fires when the Node response closes unexpectedly.
|
|
81
132
|
*
|
|
@@ -124,9 +175,12 @@ function parseQueryParams(searchParams) {
|
|
|
124
175
|
return query;
|
|
125
176
|
}
|
|
126
177
|
function cloneRequestHeaders(headers) {
|
|
127
|
-
const clonedEntries = Object.entries(headers).map(([name, value]) => [name,
|
|
178
|
+
const clonedEntries = Object.entries(headers).map(([name, value]) => [name, cloneHeaderValue(value)]);
|
|
128
179
|
return Object.fromEntries(clonedEntries);
|
|
129
180
|
}
|
|
181
|
+
function cloneHeaderValue(value) {
|
|
182
|
+
return Array.isArray(value) ? [...value] : value;
|
|
183
|
+
}
|
|
130
184
|
function readPrimaryHeaderValue(headerValue) {
|
|
131
185
|
if (Array.isArray(headerValue)) {
|
|
132
186
|
return headerValue[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal-node.d.ts","sourceRoot":"","sources":["../../src/node/internal-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAA6C,MAAM,WAAW,CAAC;AACxG,OAAO,EAAE,YAAY,IAAI,iBAAiB,EAAE,KAAK,aAAa,IAAI,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGzG,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC5B,MAAM,cAAc,CAAC;AAMtB,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EACrB,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"internal-node.d.ts","sourceRoot":"","sources":["../../src/node/internal-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { createServer as createHttpsServer } from 'node:https';
|
|
|
3
3
|
import { createServerBackedHttpAdapterRealtimeCapability } from '@fluojs/http';
|
|
4
4
|
import { bootstrapHttpAdapterApplication, runHttpAdapterApplication } from '../http-adapter-shared.js';
|
|
5
5
|
import { createNodeResponseCompression, compressNodeResponse } from './internal-node-compression.js';
|
|
6
|
-
import {
|
|
6
|
+
import { createDeferredFrameworkRequest, NodeRequestPayloadTooLargeException, createRequestSignal, materializeFrameworkRequestBody, resolveRequestIdFromHeaders } from './internal-node-request.js';
|
|
7
7
|
import { createFrameworkResponse, writeNodeAdapterErrorResponse } from './internal-node-response.js';
|
|
8
8
|
import { createNodeShutdownSignalRegistration, defaultNodeShutdownSignals, registerShutdownSignals } from './internal-node-shutdown.js';
|
|
9
9
|
import { dispatchWithRequestResponseFactory } from '../adapters/request-response-factory.js';
|
|
@@ -75,7 +75,10 @@ export class NodeHttpApplicationAdapter {
|
|
|
75
75
|
function createNodeRequestResponseFactory(compression, multipartOptions, maxBodySize, preserveRawBody) {
|
|
76
76
|
return {
|
|
77
77
|
async createRequest(request, signal) {
|
|
78
|
-
return
|
|
78
|
+
return createDeferredFrameworkRequest(request, signal, multipartOptions, maxBodySize, preserveRawBody);
|
|
79
|
+
},
|
|
80
|
+
materializeRequest(request) {
|
|
81
|
+
return materializeFrameworkRequestBody(request);
|
|
79
82
|
},
|
|
80
83
|
createRequestSignal(response) {
|
|
81
84
|
return createRequestSignal(response);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { createFrameworkRequest, createRequestSignal, resolveRequestIdFromHeaders, } from './internal-node-request.js';
|
|
1
|
+
export { createDeferredFrameworkRequest, createFrameworkRequest, createRequestSignal, materializeFrameworkRequestBody, resolveRequestIdFromHeaders, } from './internal-node-request.js';
|
|
2
2
|
//# sourceMappingURL=node-request.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-request.d.ts","sourceRoot":"","sources":["../../src/node/node-request.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"node-request.d.ts","sourceRoot":"","sources":["../../src/node/node-request.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAC9B,sBAAsB,EACtB,mBAAmB,EACnB,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,4BAA4B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { createFrameworkRequest, createRequestSignal, resolveRequestIdFromHeaders } from './internal-node-request.js';
|
|
1
|
+
export { createDeferredFrameworkRequest, createFrameworkRequest, createRequestSignal, materializeFrameworkRequestBody, resolveRequestIdFromHeaders } from './internal-node-request.js';
|
package/dist/platform-shell.d.ts
CHANGED
|
@@ -28,6 +28,10 @@ export declare class RuntimePlatformShell implements PlatformShell {
|
|
|
28
28
|
ready(): Promise<PlatformReadinessReport>;
|
|
29
29
|
health(): Promise<PlatformHealthReport>;
|
|
30
30
|
snapshot(): Promise<PlatformShellSnapshot>;
|
|
31
|
+
private collectSnapshotProbe;
|
|
32
|
+
private collectComponentSnapshot;
|
|
33
|
+
private collectComponentReadiness;
|
|
34
|
+
private collectComponentHealth;
|
|
31
35
|
assertCriticalReadiness(): Promise<void>;
|
|
32
36
|
private validateIdentityAndDependencies;
|
|
33
37
|
private validateComponents;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-shell.d.ts","sourceRoot":"","sources":["../src/platform-shell.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EACjB,sBAAsB,EAGtB,oBAAoB,EACpB,uBAAuB,EACvB,aAAa,EACb,qBAAqB,EAGtB,MAAM,wBAAwB,CAAC;AAEhC,UAAU,2BAA2B;IACnC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC;
|
|
1
|
+
{"version":3,"file":"platform-shell.d.ts","sourceRoot":"","sources":["../src/platform-shell.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EACjB,sBAAsB,EAGtB,oBAAoB,EACpB,uBAAuB,EACvB,aAAa,EACb,qBAAqB,EAGtB,MAAM,wBAAwB,CAAC;AAEhC,UAAU,2BAA2B;IACnC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC;AAwID;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IAO5C,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IANjD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAqC;IAC9D,OAAO,CAAC,yBAAyB,CAAqC;IACtE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;gBAEhC,oBAAoB,EAAE,2BAA2B,EAAE;IAEhF;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,SAAS,sBAAsB,EAAE,GAAG,SAAS,GAAG,oBAAoB;IAIlG,uBAAuB,IAAI,OAAO;IAI5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiDtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBrB,KAAK,IAAI,OAAO,CAAC,uBAAuB,CAAC;IA2BzC,MAAM,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAyBvC,QAAQ,IAAI,OAAO,CAAC,qBAAqB,CAAC;YAuBlC,oBAAoB;IAmBlC,OAAO,CAAC,wBAAwB;YAuClB,yBAAyB;YAmBzB,sBAAsB;IAkB9B,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAU9C,OAAO,CAAC,+BAA+B;YAgCzB,kBAAkB;IA4BhC,OAAO,CAAC,iBAAiB;YAsCX,qBAAqB;CAgBpC;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,SAAS,sBAAsB,EAAE,GAAG,SAAS,GAAG,oBAAoB,CAE1H"}
|
package/dist/platform-shell.js
CHANGED
|
@@ -96,7 +96,6 @@ function normalizeSnapshot(snapshot, component, dependencies) {
|
|
|
96
96
|
kind: component.kind
|
|
97
97
|
};
|
|
98
98
|
}
|
|
99
|
-
|
|
100
99
|
/**
|
|
101
100
|
* A runtime implementation of the {@link PlatformShell} that manages the lifecycle
|
|
102
101
|
* of registered platform components, including dependency ordering and diagnostics.
|
|
@@ -219,15 +218,41 @@ export class RuntimePlatformShell {
|
|
|
219
218
|
if (!this.hasRegisteredComponents()) {
|
|
220
219
|
return createEmptyShellSnapshot([...this.diagnostics]);
|
|
221
220
|
}
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
221
|
+
const probeResults = await Promise.all(this.registeredComponents.map(registration => this.collectSnapshotProbe(registration)));
|
|
222
|
+
const components = probeResults.map(result => result.snapshot);
|
|
223
|
+
const readiness = aggregateReadiness(probeResults.map(result => result.readiness));
|
|
224
|
+
const health = aggregateHealth(probeResults.map(result => result.health));
|
|
225
|
+
const diagnostics = probeResults.flatMap(result => result.diagnostics);
|
|
226
|
+
this.diagnostics.push(...diagnostics);
|
|
227
|
+
return {
|
|
228
|
+
components,
|
|
229
|
+
diagnostics: [...this.diagnostics],
|
|
230
|
+
generatedAt: new Date().toISOString(),
|
|
231
|
+
health,
|
|
232
|
+
readiness
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
async collectSnapshotProbe(registration) {
|
|
236
|
+
const [snapshot, readiness, health] = await Promise.all([this.collectComponentSnapshot(registration), this.collectComponentReadiness(registration), this.collectComponentHealth(registration)]);
|
|
237
|
+
return {
|
|
238
|
+
diagnostics: [...snapshot.diagnostics, ...readiness.diagnostics, ...health.diagnostics],
|
|
239
|
+
health: health.health,
|
|
240
|
+
readiness: readiness.readiness,
|
|
241
|
+
snapshot: snapshot.snapshot
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
collectComponentSnapshot(registration) {
|
|
245
|
+
try {
|
|
246
|
+
const snapshot = registration.component.snapshot();
|
|
247
|
+
return {
|
|
248
|
+
diagnostics: [],
|
|
249
|
+
snapshot: normalizeSnapshot(snapshot, registration.component, registration.dependencies)
|
|
250
|
+
};
|
|
251
|
+
} catch (error) {
|
|
252
|
+
const issue = createUnknownFailureIssue(registration.component.id, 'snapshot', error);
|
|
253
|
+
return {
|
|
254
|
+
diagnostics: [issue],
|
|
255
|
+
snapshot: {
|
|
231
256
|
dependencies: [...registration.dependencies],
|
|
232
257
|
details: {},
|
|
233
258
|
health: {
|
|
@@ -250,17 +275,44 @@ export class RuntimePlatformShell {
|
|
|
250
275
|
namespace: 'fluo.platform',
|
|
251
276
|
tags: {}
|
|
252
277
|
}
|
|
253
|
-
}
|
|
254
|
-
}
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
async collectComponentReadiness(registration) {
|
|
283
|
+
try {
|
|
284
|
+
return {
|
|
285
|
+
diagnostics: [],
|
|
286
|
+
readiness: await registration.component.ready()
|
|
287
|
+
};
|
|
288
|
+
} catch (error) {
|
|
289
|
+
const issue = createUnknownFailureIssue(registration.component.id, 'ready', error);
|
|
290
|
+
return {
|
|
291
|
+
diagnostics: [issue],
|
|
292
|
+
readiness: {
|
|
293
|
+
critical: true,
|
|
294
|
+
reason: issue.cause,
|
|
295
|
+
status: 'not-ready'
|
|
296
|
+
}
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
async collectComponentHealth(registration) {
|
|
301
|
+
try {
|
|
302
|
+
return {
|
|
303
|
+
diagnostics: [],
|
|
304
|
+
health: await registration.component.health()
|
|
305
|
+
};
|
|
306
|
+
} catch (error) {
|
|
307
|
+
const issue = createUnknownFailureIssue(registration.component.id, 'health', error);
|
|
308
|
+
return {
|
|
309
|
+
diagnostics: [issue],
|
|
310
|
+
health: {
|
|
311
|
+
reason: issue.cause,
|
|
312
|
+
status: 'unhealthy'
|
|
313
|
+
}
|
|
314
|
+
};
|
|
255
315
|
}
|
|
256
|
-
const [readiness, health] = await Promise.all([this.ready(), this.health()]);
|
|
257
|
-
return {
|
|
258
|
-
components,
|
|
259
|
-
diagnostics: [...this.diagnostics],
|
|
260
|
-
generatedAt: new Date().toISOString(),
|
|
261
|
-
health,
|
|
262
|
-
readiness
|
|
263
|
-
};
|
|
264
316
|
}
|
|
265
317
|
async assertCriticalReadiness() {
|
|
266
318
|
const readiness = await this.ready();
|
package/dist/types.d.ts
CHANGED
|
@@ -29,12 +29,21 @@ export interface BootstrapModuleOptions {
|
|
|
29
29
|
export interface CompiledModule {
|
|
30
30
|
type: ModuleType;
|
|
31
31
|
definition: ModuleDefinition;
|
|
32
|
+
accessibleTokens: Set<Token>;
|
|
32
33
|
exportedTokens: Set<Token>;
|
|
34
|
+
importedExportedTokens: Set<Token>;
|
|
33
35
|
providerTokens: Set<Token>;
|
|
34
36
|
}
|
|
37
|
+
/** Provider declarations that actually win runtime bootstrap registration after duplicate-policy selection. */
|
|
38
|
+
export interface BootstrapEffectiveProviders {
|
|
39
|
+
moduleProviders: Provider[];
|
|
40
|
+
rootModuleProviders: Provider[];
|
|
41
|
+
runtimeProviders: Provider[];
|
|
42
|
+
}
|
|
35
43
|
/** Result returned by low-level bootstrap compilation helpers. */
|
|
36
44
|
export interface BootstrapResult {
|
|
37
45
|
container: Container;
|
|
46
|
+
effectiveProviders: BootstrapEffectiveProviders;
|
|
38
47
|
modules: CompiledModule[];
|
|
39
48
|
rootModule: ModuleType;
|
|
40
49
|
}
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/web.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,wCAAwC,CAAC;AAEhD,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,gBAAgB;QACxB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,UAAU,CAAC;KACtB;CACF;AAOD;;GAEG;AACH,MAAM,WAAW,sCAAsC;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,sCAAsC;IACvF,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,UAAU,IAAI,QAAQ,CAAC;CACxB;AAED,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,wCAAwC,CAAC;AAEhD,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,gBAAgB;QACxB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,UAAU,CAAC;KACtB;CACF;AAOD;;GAEG;AACH,MAAM,WAAW,sCAAsC;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,sCAAsC;IACvF,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,UAAU,IAAI,QAAQ,CAAC;CACxB;AAED,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAwLhD;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,GAAE,sCAA2C,GACnD,sBAAsB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,EAAE,oBAAoB,CAAC,CA6BhF;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,EACvC,UAAU,EACV,yBAAiG,EACjG,OAAO,EACP,GAAG,OAAO,EACX,EAAE,yBAAyB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAU/C;AAED;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,WAAW,EACnB,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,WAAW,SAAwB,EACnC,eAAe,UAAQ,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAW3B"}
|
package/dist/web.js
CHANGED
|
@@ -152,7 +152,10 @@ class MutableWebFrameworkResponse {
|
|
|
152
152
|
export function createWebRequestResponseFactory(options = {}) {
|
|
153
153
|
return {
|
|
154
154
|
async createRequest(request, signal) {
|
|
155
|
-
return
|
|
155
|
+
return createDeferredWebFrameworkRequest(request, signal, options.multipart, options.maxBodySize ?? DEFAULT_MAX_BODY_SIZE, options.rawBody ?? false);
|
|
156
|
+
},
|
|
157
|
+
materializeRequest(request) {
|
|
158
|
+
return materializeWebFrameworkRequestBody(request);
|
|
156
159
|
},
|
|
157
160
|
createRequestSignal(signal) {
|
|
158
161
|
return signal ?? new AbortController().signal;
|
|
@@ -204,45 +207,103 @@ export async function dispatchWebRequest({
|
|
|
204
207
|
* @returns The normalized framework request used by the dispatcher.
|
|
205
208
|
*/
|
|
206
209
|
export async function createWebFrameworkRequest(request, signal, multipartOptions, maxBodySize = DEFAULT_MAX_BODY_SIZE, preserveRawBody = false) {
|
|
210
|
+
const frameworkRequest = createDeferredWebFrameworkRequest(request, signal, multipartOptions, maxBodySize, preserveRawBody);
|
|
211
|
+
await materializeWebFrameworkRequestBody(frameworkRequest);
|
|
212
|
+
return frameworkRequest;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Creates the cheap Web framework request shell before consuming the body stream.
|
|
217
|
+
*
|
|
218
|
+
* @param request - Native Web request to normalize.
|
|
219
|
+
* @param signal - Abort signal propagated to the framework request.
|
|
220
|
+
* @param multipartOptions - Multipart parser options applied when materializing multipart requests.
|
|
221
|
+
* @param maxBodySize - Maximum allowed non-multipart body size in bytes.
|
|
222
|
+
* @param preserveRawBody - Whether materialization should retain raw request body bytes.
|
|
223
|
+
* @returns The framework request shell with metadata snapshotted and body materialization deferred.
|
|
224
|
+
*/
|
|
225
|
+
function createDeferredWebFrameworkRequest(request, signal, multipartOptions, maxBodySize = DEFAULT_MAX_BODY_SIZE, preserveRawBody = false) {
|
|
207
226
|
const url = new URL(request.url);
|
|
208
|
-
const
|
|
227
|
+
const headerEntries = Array.from(request.headers.entries());
|
|
228
|
+
const method = request.method;
|
|
229
|
+
const cookieHeader = request.headers.get('cookie') ?? undefined;
|
|
230
|
+
const searchParams = new URLSearchParams(url.searchParams);
|
|
231
|
+
const headers = createMemoizedValue(() => cloneWebHeaders(headerEntries));
|
|
232
|
+
const cookies = createMemoizedValue(() => parseCookieHeader(cookieHeader));
|
|
233
|
+
const query = createMemoizedValue(() => parseQueryParams(searchParams));
|
|
209
234
|
const contentType = request.headers.get('content-type') ?? undefined;
|
|
210
235
|
const isMultipart = typeof contentType === 'string' && contentType.includes('multipart/form-data');
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
236
|
+
const materializeBody = createMemoizedAsyncValue(async () => {
|
|
237
|
+
if (isMultipart) {
|
|
238
|
+
const materializedRequest = request.clone();
|
|
239
|
+
const result = await parseMultipart({
|
|
240
|
+
body: materializedRequest.body,
|
|
241
|
+
headers: new Headers(headerEntries),
|
|
242
|
+
method,
|
|
243
|
+
url: url.toString()
|
|
244
|
+
}, {
|
|
245
|
+
...multipartOptions,
|
|
246
|
+
maxTotalSize: multipartOptions?.maxTotalSize ?? maxBodySize
|
|
247
|
+
});
|
|
248
|
+
frameworkRequest.body = result.fields;
|
|
249
|
+
frameworkRequest.files = result.files;
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
222
252
|
const bodyResult = await readWebRequestBody(request.clone(), contentType, maxBodySize, preserveRawBody);
|
|
223
|
-
body = bodyResult.body;
|
|
224
|
-
|
|
225
|
-
|
|
253
|
+
frameworkRequest.body = bodyResult.body;
|
|
254
|
+
if (bodyResult.rawBody) {
|
|
255
|
+
frameworkRequest.rawBody = bodyResult.rawBody;
|
|
256
|
+
}
|
|
257
|
+
});
|
|
226
258
|
const frameworkRequest = {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
259
|
+
get cookies() {
|
|
260
|
+
return cookies();
|
|
261
|
+
},
|
|
262
|
+
get headers() {
|
|
263
|
+
return headers();
|
|
264
|
+
},
|
|
265
|
+
method,
|
|
231
266
|
params: {},
|
|
232
267
|
path: url.pathname,
|
|
233
|
-
query
|
|
268
|
+
get query() {
|
|
269
|
+
return query();
|
|
270
|
+
},
|
|
234
271
|
raw: request,
|
|
235
272
|
signal,
|
|
236
|
-
url: url.pathname + url.search
|
|
273
|
+
url: url.pathname + url.search,
|
|
274
|
+
materializeBody
|
|
237
275
|
};
|
|
238
|
-
if (files) {
|
|
239
|
-
frameworkRequest.files = files;
|
|
240
|
-
}
|
|
241
|
-
if (rawBody) {
|
|
242
|
-
frameworkRequest.rawBody = rawBody;
|
|
243
|
-
}
|
|
244
276
|
return frameworkRequest;
|
|
245
277
|
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Materializes a deferred Web framework request body exactly once.
|
|
281
|
+
*
|
|
282
|
+
* @param request - Framework request returned by {@link createDeferredWebFrameworkRequest}.
|
|
283
|
+
* @returns A promise that settles after body, rawBody, and files fields are populated when applicable.
|
|
284
|
+
*/
|
|
285
|
+
async function materializeWebFrameworkRequestBody(request) {
|
|
286
|
+
await request.materializeBody?.();
|
|
287
|
+
delete request.materializeBody;
|
|
288
|
+
}
|
|
289
|
+
function createMemoizedValue(factory) {
|
|
290
|
+
let initialized = false;
|
|
291
|
+
let value;
|
|
292
|
+
return () => {
|
|
293
|
+
if (!initialized) {
|
|
294
|
+
value = factory();
|
|
295
|
+
initialized = true;
|
|
296
|
+
}
|
|
297
|
+
return value;
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
function createMemoizedAsyncValue(factory) {
|
|
301
|
+
let promise;
|
|
302
|
+
return () => {
|
|
303
|
+
promise ??= factory();
|
|
304
|
+
return promise;
|
|
305
|
+
};
|
|
306
|
+
}
|
|
246
307
|
function parseQueryParams(searchParams) {
|
|
247
308
|
const query = {};
|
|
248
309
|
for (const [key, value] of searchParams.entries()) {
|
|
@@ -261,7 +322,7 @@ function parseQueryParams(searchParams) {
|
|
|
261
322
|
}
|
|
262
323
|
function cloneWebHeaders(headers) {
|
|
263
324
|
const clonedHeaders = {};
|
|
264
|
-
for (const [name, value] of headers
|
|
325
|
+
for (const [name, value] of headers) {
|
|
265
326
|
clonedHeaders[name] = value;
|
|
266
327
|
}
|
|
267
328
|
return clonedHeaders;
|