@bleedingdev/modern-js-plugin-bff 3.2.0-ultramodern.103 → 3.2.0-ultramodern.105
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/cjs/runtime/effect/handler.js +41 -46
- package/dist/cjs/runtime/effect/index.js +17 -9
- package/dist/cjs/runtime/effect/module.js +50 -27
- package/dist/cjs/runtime/effect-client/index.js +1 -1
- package/dist/esm/runtime/effect/handler.mjs +7 -6
- package/dist/esm/runtime/effect/index.mjs +2 -0
- package/dist/esm/runtime/effect/module.mjs +50 -27
- package/dist/esm/runtime/effect-client/index.mjs +1 -1
- package/dist/esm-node/runtime/effect/handler.mjs +7 -6
- package/dist/esm-node/runtime/effect/index.mjs +2 -0
- package/dist/esm-node/runtime/effect/module.mjs +50 -27
- package/dist/esm-node/runtime/effect-client/index.mjs +1 -1
- package/dist/types/runtime/effect/handler.d.ts +7 -4
- package/dist/types/runtime/effect/index.d.ts +1 -0
- package/dist/types/runtime/effect/module.d.ts +1 -1
- package/package.json +13 -13
|
@@ -3,12 +3,12 @@ var __webpack_modules__ = {
|
|
|
3
3
|
"../data-platform" (module) {
|
|
4
4
|
module.exports = require("../data-platform/index.js");
|
|
5
5
|
},
|
|
6
|
-
"@effect/opentelemetry" (module) {
|
|
7
|
-
module.exports = require("@effect/opentelemetry");
|
|
8
|
-
},
|
|
9
6
|
"effect/Config" (module) {
|
|
10
7
|
module.exports = require("effect/Config");
|
|
11
8
|
},
|
|
9
|
+
"effect/Context" (module) {
|
|
10
|
+
module.exports = require("effect/Context");
|
|
11
|
+
},
|
|
12
12
|
"effect/Effect" (module) {
|
|
13
13
|
module.exports = require("effect/Effect");
|
|
14
14
|
},
|
|
@@ -78,18 +78,18 @@ function __webpack_require__(moduleId) {
|
|
|
78
78
|
var __webpack_exports__ = {};
|
|
79
79
|
(()=>{
|
|
80
80
|
__webpack_require__.r(__webpack_exports__);
|
|
81
|
-
var
|
|
82
|
-
var
|
|
83
|
-
var
|
|
84
|
-
var
|
|
85
|
-
var
|
|
86
|
-
var
|
|
81
|
+
var effect_Context__rspack_import_0 = __webpack_require__("effect/Context");
|
|
82
|
+
var effect_Layer__rspack_import_1 = __webpack_require__("effect/Layer");
|
|
83
|
+
var effect_unstable_http__rspack_import_2 = __webpack_require__("effect/unstable/http");
|
|
84
|
+
var effect_unstable_httpapi__rspack_import_3 = __webpack_require__("effect/unstable/httpapi");
|
|
85
|
+
var effect_unstable_rpc__rspack_import_4 = __webpack_require__("effect/unstable/rpc");
|
|
86
|
+
var _data_platform__rspack_import_5 = __webpack_require__("../data-platform");
|
|
87
87
|
var effect_Config__rspack_import_6 = __webpack_require__("effect/Config");
|
|
88
88
|
var effect_Effect__rspack_import_7 = __webpack_require__("effect/Effect");
|
|
89
89
|
var effect_Option__rspack_import_8 = __webpack_require__("effect/Option");
|
|
90
90
|
var effect_Schema__rspack_import_9 = __webpack_require__("effect/Schema");
|
|
91
91
|
var __rspack_reexport = {};
|
|
92
|
-
for(const __rspack_import_key in
|
|
92
|
+
for(const __rspack_import_key in effect_unstable_http__rspack_import_2)if ([
|
|
93
93
|
"Config",
|
|
94
94
|
"Layer",
|
|
95
95
|
"Schema",
|
|
@@ -100,12 +100,11 @@ var __webpack_exports__ = {};
|
|
|
100
100
|
"Effect",
|
|
101
101
|
"defineEffectRpcBff",
|
|
102
102
|
"createHttpApiHandler",
|
|
103
|
-
"OpenTelemetry",
|
|
104
103
|
"Option"
|
|
105
|
-
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>
|
|
104
|
+
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>effect_unstable_http__rspack_import_2[__rspack_import_key];
|
|
106
105
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
107
106
|
var __rspack_reexport = {};
|
|
108
|
-
for(const __rspack_import_key in
|
|
107
|
+
for(const __rspack_import_key in effect_unstable_httpapi__rspack_import_3)if ([
|
|
109
108
|
"Config",
|
|
110
109
|
"Layer",
|
|
111
110
|
"Schema",
|
|
@@ -116,12 +115,11 @@ var __webpack_exports__ = {};
|
|
|
116
115
|
"Effect",
|
|
117
116
|
"defineEffectRpcBff",
|
|
118
117
|
"createHttpApiHandler",
|
|
119
|
-
"OpenTelemetry",
|
|
120
118
|
"Option"
|
|
121
|
-
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>
|
|
119
|
+
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>effect_unstable_httpapi__rspack_import_3[__rspack_import_key];
|
|
122
120
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
123
121
|
var __rspack_reexport = {};
|
|
124
|
-
for(const __rspack_import_key in
|
|
122
|
+
for(const __rspack_import_key in effect_unstable_rpc__rspack_import_4)if ([
|
|
125
123
|
"Config",
|
|
126
124
|
"Layer",
|
|
127
125
|
"Schema",
|
|
@@ -132,10 +130,10 @@ var __webpack_exports__ = {};
|
|
|
132
130
|
"Effect",
|
|
133
131
|
"defineEffectRpcBff",
|
|
134
132
|
"createHttpApiHandler",
|
|
135
|
-
"OpenTelemetry",
|
|
136
133
|
"Option"
|
|
137
|
-
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>
|
|
134
|
+
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>effect_unstable_rpc__rspack_import_4[__rspack_import_key];
|
|
138
135
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
136
|
+
const emptyEffectServiceContext = effect_Context__rspack_import_0.empty();
|
|
139
137
|
function normalizeOpenApiPath(pathname) {
|
|
140
138
|
if (!pathname.startsWith('/')) return `/${pathname}`;
|
|
141
139
|
return pathname;
|
|
@@ -153,7 +151,7 @@ var __webpack_exports__ = {};
|
|
|
153
151
|
return pathname;
|
|
154
152
|
}
|
|
155
153
|
function normalizeBatchPath(pathname) {
|
|
156
|
-
if (!pathname || '/' === pathname) return
|
|
154
|
+
if (!pathname || '/' === pathname) return _data_platform__rspack_import_5.DEFAULT_DATA_BATCH_ENDPOINT;
|
|
157
155
|
if (!pathname.startsWith('/')) return `/${pathname}`;
|
|
158
156
|
return pathname;
|
|
159
157
|
}
|
|
@@ -290,33 +288,33 @@ var __webpack_exports__ = {};
|
|
|
290
288
|
function getRpcSerializationLayer(serialization) {
|
|
291
289
|
switch(serialization){
|
|
292
290
|
case 'ndjson':
|
|
293
|
-
return
|
|
291
|
+
return effect_unstable_rpc__rspack_import_4.RpcSerialization.layerNdjson;
|
|
294
292
|
case 'jsonRpc':
|
|
295
|
-
return
|
|
293
|
+
return effect_unstable_rpc__rspack_import_4.RpcSerialization.layerJsonRpc();
|
|
296
294
|
case 'ndJsonRpc':
|
|
297
|
-
return
|
|
295
|
+
return effect_unstable_rpc__rspack_import_4.RpcSerialization.layerNdJsonRpc();
|
|
298
296
|
case 'msgPack':
|
|
299
|
-
return
|
|
297
|
+
return effect_unstable_rpc__rspack_import_4.RpcSerialization.layerMsgPack;
|
|
300
298
|
default:
|
|
301
|
-
return
|
|
299
|
+
return effect_unstable_rpc__rspack_import_4.RpcSerialization.layerJsonRpc();
|
|
302
300
|
}
|
|
303
301
|
}
|
|
304
302
|
function createRpcApiHandler(options) {
|
|
305
303
|
const rpcPath = normalizeRpcPath(options.path);
|
|
306
|
-
const rpcLayer =
|
|
304
|
+
const rpcLayer = effect_Layer__rspack_import_1.provide(effect_unstable_rpc__rspack_import_4.RpcServer.layerHttp({
|
|
307
305
|
group: options.group,
|
|
308
306
|
path: rpcPath,
|
|
309
307
|
protocol: 'http',
|
|
310
308
|
disableTracing: options.disableTracing,
|
|
311
309
|
spanPrefix: options.spanPrefix,
|
|
312
310
|
spanAttributes: options.spanAttributes
|
|
313
|
-
}),
|
|
314
|
-
return
|
|
311
|
+
}), effect_Layer__rspack_import_1.mergeAll(options.layer, getRpcSerializationLayer(options.serialization)));
|
|
312
|
+
return effect_unstable_http__rspack_import_2.HttpRouter.toWebHandler(rpcLayer);
|
|
315
313
|
}
|
|
316
314
|
function createOpenApiLayer(api, openapi) {
|
|
317
315
|
const openApiOptions = getOpenApiOptions(openapi);
|
|
318
316
|
if (!openApiOptions) return null;
|
|
319
|
-
return
|
|
317
|
+
return effect_unstable_http__rspack_import_2.HttpRouter.add('GET', openApiOptions.path, effect_unstable_http__rspack_import_2.HttpServerResponse.jsonUnsafe(effect_unstable_httpapi__rspack_import_3.OpenApi.fromApi(api)));
|
|
320
318
|
}
|
|
321
319
|
function createInvalidEnvelopeResponse(message, errors) {
|
|
322
320
|
return new Response(JSON.stringify({
|
|
@@ -334,15 +332,15 @@ var __webpack_exports__ = {};
|
|
|
334
332
|
function validateDataPlatformRequestEnvelope(request, options) {
|
|
335
333
|
const isEnabled = options?.enabled ?? true;
|
|
336
334
|
if (!isEnabled) return null;
|
|
337
|
-
const envelopeHeader = options?.envelopeHeader ||
|
|
335
|
+
const envelopeHeader = options?.envelopeHeader || _data_platform__rspack_import_5.DEFAULT_DATA_ENVELOPE_HEADER;
|
|
338
336
|
const encodedEnvelope = request.headers.get(envelopeHeader);
|
|
339
337
|
if (!encodedEnvelope) {
|
|
340
338
|
if (options?.requireEnvelope) return createInvalidEnvelopeResponse(`Missing required data envelope header: ${envelopeHeader}`);
|
|
341
339
|
return null;
|
|
342
340
|
}
|
|
343
|
-
const envelope = (0,
|
|
341
|
+
const envelope = (0, _data_platform__rspack_import_5.decodeRequestEnvelopeHeader)(encodedEnvelope);
|
|
344
342
|
if (!envelope) return createInvalidEnvelopeResponse(`Invalid data envelope header format: ${envelopeHeader}`);
|
|
345
|
-
const validation = (0,
|
|
343
|
+
const validation = (0, _data_platform__rspack_import_5.validateRequestEnvelope)(envelope, {
|
|
346
344
|
expectedProtocolVersion: 1,
|
|
347
345
|
expectedNamespace: options?.expectedNamespace,
|
|
348
346
|
expectedOrigin: options?.validateOrigin === false ? void 0 : getExpectedEnvelopeOrigin(request),
|
|
@@ -350,7 +348,7 @@ var __webpack_exports__ = {};
|
|
|
350
348
|
});
|
|
351
349
|
if (!validation.ok) return createInvalidEnvelopeResponse('Invalid data envelope', validation.errors);
|
|
352
350
|
if (envelope.selectionPlan) {
|
|
353
|
-
const selectionValidation = (0,
|
|
351
|
+
const selectionValidation = (0, _data_platform__rspack_import_5.validateSelectionPlan)(envelope.selectionPlan, {
|
|
354
352
|
maxDepth: options?.selection?.maxDepth,
|
|
355
353
|
maxFields: options?.selection?.maxFields,
|
|
356
354
|
allowedLeafPaths: options?.selection?.allowedLeafPaths
|
|
@@ -412,10 +410,10 @@ var __webpack_exports__ = {};
|
|
|
412
410
|
};
|
|
413
411
|
}
|
|
414
412
|
function createHttpApiHandler(options) {
|
|
415
|
-
const apiLayer = options.layer;
|
|
413
|
+
const apiLayer = options.layer.pipe(effect_Layer__rspack_import_1.provide(effect_unstable_http__rspack_import_2.HttpServer.layerServices));
|
|
416
414
|
const openApiLayer = createOpenApiLayer(options.api, options.openapi);
|
|
417
|
-
const mergedLayer = openApiLayer ?
|
|
418
|
-
const httpApiHandler =
|
|
415
|
+
const mergedLayer = openApiLayer ? effect_Layer__rspack_import_1.mergeAll(apiLayer, openApiLayer) : apiLayer;
|
|
416
|
+
const httpApiHandler = effect_unstable_http__rspack_import_2.HttpRouter.toWebHandler(mergedLayer);
|
|
419
417
|
const dataPlatformBatchOptions = options.dataPlatform?.batch;
|
|
420
418
|
const batchEnabled = dataPlatformBatchOptions?.enabled !== false;
|
|
421
419
|
const batchPath = normalizeBatchPath(dataPlatformBatchOptions?.endpoint);
|
|
@@ -424,12 +422,12 @@ var __webpack_exports__ = {};
|
|
|
424
422
|
const batchConcurrency = Math.max(1, dataPlatformBatchOptions?.maxConcurrency ?? 4);
|
|
425
423
|
const batchItemTimeoutMs = Math.max(0, dataPlatformBatchOptions?.requestTimeoutMs ?? 10000);
|
|
426
424
|
const batchAllowedMethods = normalizeBatchAllowedMethods(dataPlatformBatchOptions?.allowedMethods);
|
|
427
|
-
const envelopeHeader = options.dataPlatform?.envelopeHeader ||
|
|
425
|
+
const envelopeHeader = options.dataPlatform?.envelopeHeader || _data_platform__rspack_import_5.DEFAULT_DATA_ENVELOPE_HEADER;
|
|
428
426
|
const normalizedEnvelopeHeader = envelopeHeader.toLowerCase();
|
|
429
427
|
const withDataPlatformValidation = async (request, context)=>{
|
|
430
428
|
const validationError = validateDataPlatformRequestEnvelope(request, options.dataPlatform);
|
|
431
429
|
if (validationError) return validationError;
|
|
432
|
-
return httpApiHandler.handler(request, context);
|
|
430
|
+
return httpApiHandler.handler(request, context ?? emptyEffectServiceContext);
|
|
433
431
|
};
|
|
434
432
|
const handleBatchRequest = async (request, context)=>{
|
|
435
433
|
const mountedPrefix = getMountedPrefixFromContext(request, context);
|
|
@@ -472,7 +470,7 @@ var __webpack_exports__ = {};
|
|
|
472
470
|
if (!normalizedHeaders.traceparent) {
|
|
473
471
|
const encodedEnvelope = normalizedHeaders[normalizedEnvelopeHeader];
|
|
474
472
|
if ('string' == typeof encodedEnvelope) {
|
|
475
|
-
const envelope = (0,
|
|
473
|
+
const envelope = (0, _data_platform__rspack_import_5.decodeRequestEnvelopeHeader)(encodedEnvelope);
|
|
476
474
|
if (envelope?.traceparent) normalizedHeaders.traceparent = envelope.traceparent;
|
|
477
475
|
}
|
|
478
476
|
}
|
|
@@ -528,7 +526,7 @@ var __webpack_exports__ = {};
|
|
|
528
526
|
status: 200,
|
|
529
527
|
headers: {
|
|
530
528
|
'content-type': 'application/json; charset=utf-8',
|
|
531
|
-
[
|
|
529
|
+
[_data_platform__rspack_import_5.DEFAULT_DATA_BATCH_HEADER]: '1',
|
|
532
530
|
'x-modernjs-data-batch-id': payload.batchId
|
|
533
531
|
}
|
|
534
532
|
});
|
|
@@ -548,7 +546,7 @@ var __webpack_exports__ = {};
|
|
|
548
546
|
const rpcHandler = createRpcApiHandler(options.rpc);
|
|
549
547
|
return {
|
|
550
548
|
handler: async (request, context)=>{
|
|
551
|
-
if (isRpcRequest(request, rpcPath)) return rpcHandler.handler(request, context);
|
|
549
|
+
if (isRpcRequest(request, rpcPath)) return rpcHandler.handler(request, context ?? emptyEffectServiceContext);
|
|
552
550
|
return handleHttpApiRequest(request);
|
|
553
551
|
},
|
|
554
552
|
dispose: async ()=>{
|
|
@@ -562,10 +560,9 @@ var __webpack_exports__ = {};
|
|
|
562
560
|
__webpack_require__.d(__webpack_exports__, {
|
|
563
561
|
Config: ()=>effect_Config__rspack_import_6,
|
|
564
562
|
Effect: ()=>effect_Effect__rspack_import_7,
|
|
565
|
-
HttpApiBuilder: ()=>
|
|
566
|
-
HttpTraceContext: ()=>
|
|
567
|
-
Layer: ()=>
|
|
568
|
-
OpenTelemetry: ()=>_effect_opentelemetry__rspack_import_5,
|
|
563
|
+
HttpApiBuilder: ()=>effect_unstable_httpapi__rspack_import_3.HttpApiBuilder,
|
|
564
|
+
HttpTraceContext: ()=>effect_unstable_http__rspack_import_2.HttpTraceContext,
|
|
565
|
+
Layer: ()=>effect_Layer__rspack_import_1,
|
|
569
566
|
Option: ()=>effect_Option__rspack_import_8,
|
|
570
567
|
Schema: ()=>effect_Schema__rspack_import_9,
|
|
571
568
|
createHttpApiHandler: ()=>createHttpApiHandler,
|
|
@@ -578,7 +575,6 @@ exports.Effect = __webpack_exports__.Effect;
|
|
|
578
575
|
exports.HttpApiBuilder = __webpack_exports__.HttpApiBuilder;
|
|
579
576
|
exports.HttpTraceContext = __webpack_exports__.HttpTraceContext;
|
|
580
577
|
exports.Layer = __webpack_exports__.Layer;
|
|
581
|
-
exports.OpenTelemetry = __webpack_exports__.OpenTelemetry;
|
|
582
578
|
exports.Option = __webpack_exports__.Option;
|
|
583
579
|
exports.Schema = __webpack_exports__.Schema;
|
|
584
580
|
exports.createHttpApiHandler = __webpack_exports__.createHttpApiHandler;
|
|
@@ -590,7 +586,6 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
|
590
586
|
"HttpApiBuilder",
|
|
591
587
|
"HttpTraceContext",
|
|
592
588
|
"Layer",
|
|
593
|
-
"OpenTelemetry",
|
|
594
589
|
"Option",
|
|
595
590
|
"Schema",
|
|
596
591
|
"createHttpApiHandler",
|
|
@@ -5,6 +5,9 @@ var __webpack_modules__ = {
|
|
|
5
5
|
},
|
|
6
6
|
"./handler" (module) {
|
|
7
7
|
module.exports = require("./handler.js");
|
|
8
|
+
},
|
|
9
|
+
"@effect/opentelemetry" (module) {
|
|
10
|
+
module.exports = require("@effect/opentelemetry");
|
|
8
11
|
}
|
|
9
12
|
};
|
|
10
13
|
var __webpack_module_cache__ = {};
|
|
@@ -54,26 +57,31 @@ function __webpack_require__(moduleId) {
|
|
|
54
57
|
var __webpack_exports__ = {};
|
|
55
58
|
(()=>{
|
|
56
59
|
__webpack_require__.r(__webpack_exports__);
|
|
57
|
-
var
|
|
58
|
-
var
|
|
60
|
+
var _effect_opentelemetry__rspack_import_0 = __webpack_require__("@effect/opentelemetry");
|
|
61
|
+
var _context__rspack_import_1 = __webpack_require__("./context");
|
|
62
|
+
var _handler__rspack_import_2 = __webpack_require__("./handler");
|
|
59
63
|
var __rspack_reexport = {};
|
|
60
|
-
for(const __rspack_import_key in
|
|
64
|
+
for(const __rspack_import_key in _handler__rspack_import_2)if ([
|
|
61
65
|
"useEffectContext",
|
|
62
66
|
"default",
|
|
63
|
-
"
|
|
64
|
-
"createEffectOperationContext"
|
|
65
|
-
|
|
67
|
+
"OpenTelemetry",
|
|
68
|
+
"createEffectOperationContext",
|
|
69
|
+
"useOperationContext"
|
|
70
|
+
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_handler__rspack_import_2[__rspack_import_key];
|
|
66
71
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
67
72
|
__webpack_require__.d(__webpack_exports__, {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
73
|
+
OpenTelemetry: ()=>_effect_opentelemetry__rspack_import_0,
|
|
74
|
+
createEffectOperationContext: ()=>_context__rspack_import_1.createEffectOperationContext,
|
|
75
|
+
useEffectContext: ()=>_context__rspack_import_1.useEffectContext,
|
|
76
|
+
useOperationContext: ()=>_context__rspack_import_1.useOperationContext
|
|
71
77
|
});
|
|
72
78
|
})();
|
|
79
|
+
exports.OpenTelemetry = __webpack_exports__.OpenTelemetry;
|
|
73
80
|
exports.createEffectOperationContext = __webpack_exports__.createEffectOperationContext;
|
|
74
81
|
exports.useEffectContext = __webpack_exports__.useEffectContext;
|
|
75
82
|
exports.useOperationContext = __webpack_exports__.useOperationContext;
|
|
76
83
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
84
|
+
"OpenTelemetry",
|
|
77
85
|
"createEffectOperationContext",
|
|
78
86
|
"useEffectContext",
|
|
79
87
|
"useOperationContext"
|
|
@@ -30,6 +30,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
31
|
resolveEffectBffModuleHandler: ()=>resolveEffectBffModuleHandler
|
|
32
32
|
});
|
|
33
|
+
const Context_namespaceObject = require("effect/Context");
|
|
33
34
|
const httpapi_namespaceObject = require("effect/unstable/httpapi");
|
|
34
35
|
const external_handler_js_namespaceObject = require("./handler.js");
|
|
35
36
|
function isRecord(value) {
|
|
@@ -44,15 +45,29 @@ function isRequestHandler(value) {
|
|
|
44
45
|
function isEffectApiDefinition(module) {
|
|
45
46
|
return httpapi_namespaceObject.HttpApi.isHttpApi(module.api) && void 0 !== module.layer;
|
|
46
47
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
48
|
+
function isEffectServiceContext(context) {
|
|
49
|
+
return 'object' == typeof context && null !== context && 'mapUnsafe' in context;
|
|
50
|
+
}
|
|
51
|
+
const emptyEffectServiceContext = Context_namespaceObject.empty();
|
|
52
|
+
function callEffectBffRequestHandler(handler, request, context) {
|
|
53
|
+
return void 0 === context ? handler(request) : handler(request, context);
|
|
54
|
+
}
|
|
55
|
+
function createLoadedHandler(webHandler) {
|
|
56
|
+
return {
|
|
57
|
+
handler: (request, context)=>callEffectBffRequestHandler(webHandler.handler, request, context),
|
|
58
|
+
dispose: webHandler.dispose
|
|
55
59
|
};
|
|
60
|
+
}
|
|
61
|
+
function createLoadedHttpApiHandler(webHandler) {
|
|
62
|
+
return {
|
|
63
|
+
handler: (request, context)=>{
|
|
64
|
+
const effectContext = isEffectServiceContext(context) ? context : emptyEffectServiceContext;
|
|
65
|
+
return webHandler.handler(request, effectContext);
|
|
66
|
+
},
|
|
67
|
+
dispose: webHandler.dispose
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function resolveNormalizedEffectBffModuleHandler(normalizedModule, options = {}) {
|
|
56
71
|
if (isRequestHandler(normalizedModule.handler)) return {
|
|
57
72
|
handler: normalizedModule.handler
|
|
58
73
|
};
|
|
@@ -60,13 +75,6 @@ async function resolveEffectBffModuleHandler(mod, options = {}) {
|
|
|
60
75
|
if (isRequestHandler(entry)) return {
|
|
61
76
|
handler: entry
|
|
62
77
|
};
|
|
63
|
-
if ('function' == typeof entry && 0 === entry.length) {
|
|
64
|
-
const out = await entry();
|
|
65
|
-
if (isRequestHandler(out)) return {
|
|
66
|
-
handler: out
|
|
67
|
-
};
|
|
68
|
-
mergeRuntimeExports(out);
|
|
69
|
-
}
|
|
70
78
|
if (isRecord(entry)) normalizedModule = {
|
|
71
79
|
...normalizedModule,
|
|
72
80
|
...entry
|
|
@@ -86,12 +94,7 @@ async function resolveEffectBffModuleHandler(mod, options = {}) {
|
|
|
86
94
|
openapi: options.openapi,
|
|
87
95
|
dataPlatform: options.dataPlatform
|
|
88
96
|
});
|
|
89
|
-
return
|
|
90
|
-
handler: async (request, context)=>webHandler.handler(request, context),
|
|
91
|
-
dispose: async ()=>{
|
|
92
|
-
await webHandler.dispose();
|
|
93
|
-
}
|
|
94
|
-
};
|
|
97
|
+
return createLoadedHandler(webHandler);
|
|
95
98
|
}
|
|
96
99
|
if (isEffectApiDefinition(normalizedModule)) {
|
|
97
100
|
options.onWarning?.('[BFF][Effect] Detected { api, layer } export without createHandler. Prefer `defineEffectBff(...)` from @modern-js/plugin-bff/server to avoid module instance mismatch.');
|
|
@@ -101,15 +104,35 @@ async function resolveEffectBffModuleHandler(mod, options = {}) {
|
|
|
101
104
|
openapi: options.openapi,
|
|
102
105
|
dataPlatform: options.dataPlatform
|
|
103
106
|
});
|
|
104
|
-
return
|
|
105
|
-
handler: async (request, context)=>webHandler.handler(request, context),
|
|
106
|
-
dispose: async ()=>{
|
|
107
|
-
await webHandler.dispose();
|
|
108
|
-
}
|
|
109
|
-
};
|
|
107
|
+
return createLoadedHttpApiHandler(webHandler);
|
|
110
108
|
}
|
|
111
109
|
return null;
|
|
112
110
|
}
|
|
111
|
+
function resolveEffectBffModuleHandler(mod, options = {}) {
|
|
112
|
+
let normalizedModule = mod;
|
|
113
|
+
const mergeRuntimeExports = (value)=>{
|
|
114
|
+
if (!isRecord(value) || !includesRuntimeExports(value)) return;
|
|
115
|
+
normalizedModule = {
|
|
116
|
+
...normalizedModule,
|
|
117
|
+
...value
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
if (isRequestHandler(normalizedModule.handler)) return Promise.resolve({
|
|
121
|
+
handler: normalizedModule.handler
|
|
122
|
+
});
|
|
123
|
+
const entry = normalizedModule.default;
|
|
124
|
+
if (isRequestHandler(entry)) return Promise.resolve({
|
|
125
|
+
handler: entry
|
|
126
|
+
});
|
|
127
|
+
if ('function' == typeof entry && 0 === entry.length) return Promise.resolve(entry()).then((out)=>{
|
|
128
|
+
if (isRequestHandler(out)) return {
|
|
129
|
+
handler: out
|
|
130
|
+
};
|
|
131
|
+
mergeRuntimeExports(out);
|
|
132
|
+
return resolveNormalizedEffectBffModuleHandler(normalizedModule, options);
|
|
133
|
+
});
|
|
134
|
+
return Promise.resolve(resolveNormalizedEffectBffModuleHandler(normalizedModule, options));
|
|
135
|
+
}
|
|
113
136
|
exports.resolveEffectBffModuleHandler = __webpack_exports__.resolveEffectBffModuleHandler;
|
|
114
137
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
115
138
|
"resolveEffectBffModuleHandler"
|
|
@@ -106,7 +106,7 @@ function makeEffectHttpApiClient(api, options) {
|
|
|
106
106
|
for (const [header, value] of Object.entries(requestContextHeaders))if (void 0 === nextRequest.headers[header.toLowerCase()]) nextRequest = http_namespaceObject.HttpClientRequest.setHeader(nextRequest, header, value);
|
|
107
107
|
return nextRequest;
|
|
108
108
|
}));
|
|
109
|
-
return options?.transformClient ? options.transformClient(contextClient) : contextClient;
|
|
109
|
+
return 'function' == typeof options?.transformClient ? options.transformClient(contextClient) : contextClient;
|
|
110
110
|
};
|
|
111
111
|
return httpapi_namespaceObject.HttpApiClient.make(api, {
|
|
112
112
|
baseUrl: options?.baseUrl,
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import * as __rspack_external_effect_Layer_16f7a8fc from "effect/Layer";
|
|
2
|
-
import { HttpRouter, HttpServerResponse, HttpTraceContext } from "effect/unstable/http";
|
|
2
|
+
import { HttpRouter, HttpServer, HttpServerResponse, HttpTraceContext } from "effect/unstable/http";
|
|
3
3
|
import { HttpApiBuilder, OpenApi } from "effect/unstable/httpapi";
|
|
4
4
|
import { RpcSerialization, RpcServer } from "effect/unstable/rpc";
|
|
5
5
|
import { DEFAULT_DATA_BATCH_ENDPOINT, DEFAULT_DATA_BATCH_HEADER, DEFAULT_DATA_ENVELOPE_HEADER, decodeRequestEnvelopeHeader, validateRequestEnvelope, validateSelectionPlan } from "../data-platform/index.mjs";
|
|
6
|
-
import * as __rspack_external__effect_opentelemetry_8bbbb5af from "@effect/opentelemetry";
|
|
7
6
|
import * as __rspack_external_effect_Config_29be8a92 from "effect/Config";
|
|
8
7
|
import * as __rspack_external_effect_Effect_194ac36c from "effect/Effect";
|
|
9
8
|
import * as __rspack_external_effect_Option_4d691636 from "effect/Option";
|
|
@@ -11,6 +10,8 @@ import * as __rspack_external_effect_Schema_f8472650 from "effect/Schema";
|
|
|
11
10
|
export * from "effect/unstable/http";
|
|
12
11
|
export * from "effect/unstable/httpapi";
|
|
13
12
|
export * from "effect/unstable/rpc";
|
|
13
|
+
import * as __rspack_external_effect_Context_f1289ca3 from "effect/Context";
|
|
14
|
+
const emptyEffectServiceContext = __rspack_external_effect_Context_f1289ca3.empty();
|
|
14
15
|
function normalizeOpenApiPath(pathname) {
|
|
15
16
|
if (!pathname.startsWith('/')) return `/${pathname}`;
|
|
16
17
|
return pathname;
|
|
@@ -287,7 +288,7 @@ function defineEffectRpcBff(definition) {
|
|
|
287
288
|
};
|
|
288
289
|
}
|
|
289
290
|
function createHttpApiHandler(options) {
|
|
290
|
-
const apiLayer = options.layer;
|
|
291
|
+
const apiLayer = options.layer.pipe(__rspack_external_effect_Layer_16f7a8fc.provide(HttpServer.layerServices));
|
|
291
292
|
const openApiLayer = createOpenApiLayer(options.api, options.openapi);
|
|
292
293
|
const mergedLayer = openApiLayer ? __rspack_external_effect_Layer_16f7a8fc.mergeAll(apiLayer, openApiLayer) : apiLayer;
|
|
293
294
|
const httpApiHandler = HttpRouter.toWebHandler(mergedLayer);
|
|
@@ -304,7 +305,7 @@ function createHttpApiHandler(options) {
|
|
|
304
305
|
const withDataPlatformValidation = async (request, context)=>{
|
|
305
306
|
const validationError = validateDataPlatformRequestEnvelope(request, options.dataPlatform);
|
|
306
307
|
if (validationError) return validationError;
|
|
307
|
-
return httpApiHandler.handler(request, context);
|
|
308
|
+
return httpApiHandler.handler(request, context ?? emptyEffectServiceContext);
|
|
308
309
|
};
|
|
309
310
|
const handleBatchRequest = async (request, context)=>{
|
|
310
311
|
const mountedPrefix = getMountedPrefixFromContext(request, context);
|
|
@@ -423,7 +424,7 @@ function createHttpApiHandler(options) {
|
|
|
423
424
|
const rpcHandler = createRpcApiHandler(options.rpc);
|
|
424
425
|
return {
|
|
425
426
|
handler: async (request, context)=>{
|
|
426
|
-
if (isRpcRequest(request, rpcPath)) return rpcHandler.handler(request, context);
|
|
427
|
+
if (isRpcRequest(request, rpcPath)) return rpcHandler.handler(request, context ?? emptyEffectServiceContext);
|
|
427
428
|
return handleHttpApiRequest(request);
|
|
428
429
|
},
|
|
429
430
|
dispose: async ()=>{
|
|
@@ -434,4 +435,4 @@ function createHttpApiHandler(options) {
|
|
|
434
435
|
}
|
|
435
436
|
};
|
|
436
437
|
}
|
|
437
|
-
export { HttpApiBuilder, HttpTraceContext,
|
|
438
|
+
export { HttpApiBuilder, HttpTraceContext, __rspack_external_effect_Config_29be8a92 as Config, __rspack_external_effect_Effect_194ac36c as Effect, __rspack_external_effect_Layer_16f7a8fc as Layer, __rspack_external_effect_Option_4d691636 as Option, __rspack_external_effect_Schema_f8472650 as Schema, createHttpApiHandler, defineEffectBff, defineEffectRpcBff };
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
+
import * as __rspack_external__effect_opentelemetry_8bbbb5af from "@effect/opentelemetry";
|
|
1
2
|
export * from "./handler.mjs";
|
|
2
3
|
export { createEffectOperationContext, useEffectContext, useOperationContext } from "./context.mjs";
|
|
4
|
+
export { __rspack_external__effect_opentelemetry_8bbbb5af as OpenTelemetry };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { HttpApi } from "effect/unstable/httpapi";
|
|
2
2
|
import { createHttpApiHandler } from "./handler.mjs";
|
|
3
|
+
import * as __rspack_external_effect_Context_f1289ca3 from "effect/Context";
|
|
3
4
|
function isRecord(value) {
|
|
4
5
|
return 'object' == typeof value && null !== value;
|
|
5
6
|
}
|
|
@@ -12,15 +13,29 @@ function isRequestHandler(value) {
|
|
|
12
13
|
function isEffectApiDefinition(module) {
|
|
13
14
|
return HttpApi.isHttpApi(module.api) && void 0 !== module.layer;
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
function isEffectServiceContext(context) {
|
|
17
|
+
return 'object' == typeof context && null !== context && 'mapUnsafe' in context;
|
|
18
|
+
}
|
|
19
|
+
const emptyEffectServiceContext = __rspack_external_effect_Context_f1289ca3.empty();
|
|
20
|
+
function callEffectBffRequestHandler(handler, request, context) {
|
|
21
|
+
return void 0 === context ? handler(request) : handler(request, context);
|
|
22
|
+
}
|
|
23
|
+
function createLoadedHandler(webHandler) {
|
|
24
|
+
return {
|
|
25
|
+
handler: (request, context)=>callEffectBffRequestHandler(webHandler.handler, request, context),
|
|
26
|
+
dispose: webHandler.dispose
|
|
23
27
|
};
|
|
28
|
+
}
|
|
29
|
+
function createLoadedHttpApiHandler(webHandler) {
|
|
30
|
+
return {
|
|
31
|
+
handler: (request, context)=>{
|
|
32
|
+
const effectContext = isEffectServiceContext(context) ? context : emptyEffectServiceContext;
|
|
33
|
+
return webHandler.handler(request, effectContext);
|
|
34
|
+
},
|
|
35
|
+
dispose: webHandler.dispose
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function resolveNormalizedEffectBffModuleHandler(normalizedModule, options = {}) {
|
|
24
39
|
if (isRequestHandler(normalizedModule.handler)) return {
|
|
25
40
|
handler: normalizedModule.handler
|
|
26
41
|
};
|
|
@@ -28,13 +43,6 @@ async function resolveEffectBffModuleHandler(mod, options = {}) {
|
|
|
28
43
|
if (isRequestHandler(entry)) return {
|
|
29
44
|
handler: entry
|
|
30
45
|
};
|
|
31
|
-
if ('function' == typeof entry && 0 === entry.length) {
|
|
32
|
-
const out = await entry();
|
|
33
|
-
if (isRequestHandler(out)) return {
|
|
34
|
-
handler: out
|
|
35
|
-
};
|
|
36
|
-
mergeRuntimeExports(out);
|
|
37
|
-
}
|
|
38
46
|
if (isRecord(entry)) normalizedModule = {
|
|
39
47
|
...normalizedModule,
|
|
40
48
|
...entry
|
|
@@ -54,12 +62,7 @@ async function resolveEffectBffModuleHandler(mod, options = {}) {
|
|
|
54
62
|
openapi: options.openapi,
|
|
55
63
|
dataPlatform: options.dataPlatform
|
|
56
64
|
});
|
|
57
|
-
return
|
|
58
|
-
handler: async (request, context)=>webHandler.handler(request, context),
|
|
59
|
-
dispose: async ()=>{
|
|
60
|
-
await webHandler.dispose();
|
|
61
|
-
}
|
|
62
|
-
};
|
|
65
|
+
return createLoadedHandler(webHandler);
|
|
63
66
|
}
|
|
64
67
|
if (isEffectApiDefinition(normalizedModule)) {
|
|
65
68
|
options.onWarning?.('[BFF][Effect] Detected { api, layer } export without createHandler. Prefer `defineEffectBff(...)` from @modern-js/plugin-bff/server to avoid module instance mismatch.');
|
|
@@ -69,13 +72,33 @@ async function resolveEffectBffModuleHandler(mod, options = {}) {
|
|
|
69
72
|
openapi: options.openapi,
|
|
70
73
|
dataPlatform: options.dataPlatform
|
|
71
74
|
});
|
|
72
|
-
return
|
|
73
|
-
handler: async (request, context)=>webHandler.handler(request, context),
|
|
74
|
-
dispose: async ()=>{
|
|
75
|
-
await webHandler.dispose();
|
|
76
|
-
}
|
|
77
|
-
};
|
|
75
|
+
return createLoadedHttpApiHandler(webHandler);
|
|
78
76
|
}
|
|
79
77
|
return null;
|
|
80
78
|
}
|
|
79
|
+
function resolveEffectBffModuleHandler(mod, options = {}) {
|
|
80
|
+
let normalizedModule = mod;
|
|
81
|
+
const mergeRuntimeExports = (value)=>{
|
|
82
|
+
if (!isRecord(value) || !includesRuntimeExports(value)) return;
|
|
83
|
+
normalizedModule = {
|
|
84
|
+
...normalizedModule,
|
|
85
|
+
...value
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
if (isRequestHandler(normalizedModule.handler)) return Promise.resolve({
|
|
89
|
+
handler: normalizedModule.handler
|
|
90
|
+
});
|
|
91
|
+
const entry = normalizedModule.default;
|
|
92
|
+
if (isRequestHandler(entry)) return Promise.resolve({
|
|
93
|
+
handler: entry
|
|
94
|
+
});
|
|
95
|
+
if ('function' == typeof entry && 0 === entry.length) return Promise.resolve(entry()).then((out)=>{
|
|
96
|
+
if (isRequestHandler(out)) return {
|
|
97
|
+
handler: out
|
|
98
|
+
};
|
|
99
|
+
mergeRuntimeExports(out);
|
|
100
|
+
return resolveNormalizedEffectBffModuleHandler(normalizedModule, options);
|
|
101
|
+
});
|
|
102
|
+
return Promise.resolve(resolveNormalizedEffectBffModuleHandler(normalizedModule, options));
|
|
103
|
+
}
|
|
81
104
|
export { resolveEffectBffModuleHandler };
|
|
@@ -55,7 +55,7 @@ function makeEffectHttpApiClient(api, options) {
|
|
|
55
55
|
for (const [header, value] of Object.entries(requestContextHeaders))if (void 0 === nextRequest.headers[header.toLowerCase()]) nextRequest = HttpClientRequest.setHeader(nextRequest, header, value);
|
|
56
56
|
return nextRequest;
|
|
57
57
|
}));
|
|
58
|
-
return options?.transformClient ? options.transformClient(contextClient) : contextClient;
|
|
58
|
+
return 'function' == typeof options?.transformClient ? options.transformClient(contextClient) : contextClient;
|
|
59
59
|
};
|
|
60
60
|
return HttpApiClient.make(api, {
|
|
61
61
|
baseUrl: options?.baseUrl,
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import "node:module";
|
|
2
2
|
import * as __rspack_external_effect_Layer_16f7a8fc from "effect/Layer";
|
|
3
|
-
import { HttpRouter, HttpServerResponse, HttpTraceContext } from "effect/unstable/http";
|
|
3
|
+
import { HttpRouter, HttpServer, HttpServerResponse, HttpTraceContext } from "effect/unstable/http";
|
|
4
4
|
import { HttpApiBuilder, OpenApi } from "effect/unstable/httpapi";
|
|
5
5
|
import { RpcSerialization, RpcServer } from "effect/unstable/rpc";
|
|
6
6
|
import { DEFAULT_DATA_BATCH_ENDPOINT, DEFAULT_DATA_BATCH_HEADER, DEFAULT_DATA_ENVELOPE_HEADER, decodeRequestEnvelopeHeader, validateRequestEnvelope, validateSelectionPlan } from "../data-platform/index.mjs";
|
|
7
|
-
import * as __rspack_external__effect_opentelemetry_8bbbb5af from "@effect/opentelemetry";
|
|
8
7
|
import * as __rspack_external_effect_Config_29be8a92 from "effect/Config";
|
|
9
8
|
import * as __rspack_external_effect_Effect_194ac36c from "effect/Effect";
|
|
10
9
|
import * as __rspack_external_effect_Option_4d691636 from "effect/Option";
|
|
@@ -12,6 +11,8 @@ import * as __rspack_external_effect_Schema_f8472650 from "effect/Schema";
|
|
|
12
11
|
export * from "effect/unstable/http";
|
|
13
12
|
export * from "effect/unstable/httpapi";
|
|
14
13
|
export * from "effect/unstable/rpc";
|
|
14
|
+
import * as __rspack_external_effect_Context_f1289ca3 from "effect/Context";
|
|
15
|
+
const emptyEffectServiceContext = __rspack_external_effect_Context_f1289ca3.empty();
|
|
15
16
|
function normalizeOpenApiPath(pathname) {
|
|
16
17
|
if (!pathname.startsWith('/')) return `/${pathname}`;
|
|
17
18
|
return pathname;
|
|
@@ -288,7 +289,7 @@ function defineEffectRpcBff(definition) {
|
|
|
288
289
|
};
|
|
289
290
|
}
|
|
290
291
|
function createHttpApiHandler(options) {
|
|
291
|
-
const apiLayer = options.layer;
|
|
292
|
+
const apiLayer = options.layer.pipe(__rspack_external_effect_Layer_16f7a8fc.provide(HttpServer.layerServices));
|
|
292
293
|
const openApiLayer = createOpenApiLayer(options.api, options.openapi);
|
|
293
294
|
const mergedLayer = openApiLayer ? __rspack_external_effect_Layer_16f7a8fc.mergeAll(apiLayer, openApiLayer) : apiLayer;
|
|
294
295
|
const httpApiHandler = HttpRouter.toWebHandler(mergedLayer);
|
|
@@ -305,7 +306,7 @@ function createHttpApiHandler(options) {
|
|
|
305
306
|
const withDataPlatformValidation = async (request, context)=>{
|
|
306
307
|
const validationError = validateDataPlatformRequestEnvelope(request, options.dataPlatform);
|
|
307
308
|
if (validationError) return validationError;
|
|
308
|
-
return httpApiHandler.handler(request, context);
|
|
309
|
+
return httpApiHandler.handler(request, context ?? emptyEffectServiceContext);
|
|
309
310
|
};
|
|
310
311
|
const handleBatchRequest = async (request, context)=>{
|
|
311
312
|
const mountedPrefix = getMountedPrefixFromContext(request, context);
|
|
@@ -424,7 +425,7 @@ function createHttpApiHandler(options) {
|
|
|
424
425
|
const rpcHandler = createRpcApiHandler(options.rpc);
|
|
425
426
|
return {
|
|
426
427
|
handler: async (request, context)=>{
|
|
427
|
-
if (isRpcRequest(request, rpcPath)) return rpcHandler.handler(request, context);
|
|
428
|
+
if (isRpcRequest(request, rpcPath)) return rpcHandler.handler(request, context ?? emptyEffectServiceContext);
|
|
428
429
|
return handleHttpApiRequest(request);
|
|
429
430
|
},
|
|
430
431
|
dispose: async ()=>{
|
|
@@ -435,4 +436,4 @@ function createHttpApiHandler(options) {
|
|
|
435
436
|
}
|
|
436
437
|
};
|
|
437
438
|
}
|
|
438
|
-
export { HttpApiBuilder, HttpTraceContext,
|
|
439
|
+
export { HttpApiBuilder, HttpTraceContext, __rspack_external_effect_Config_29be8a92 as Config, __rspack_external_effect_Effect_194ac36c as Effect, __rspack_external_effect_Layer_16f7a8fc as Layer, __rspack_external_effect_Option_4d691636 as Option, __rspack_external_effect_Schema_f8472650 as Schema, createHttpApiHandler, defineEffectBff, defineEffectRpcBff };
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import "node:module";
|
|
2
|
+
import * as __rspack_external__effect_opentelemetry_8bbbb5af from "@effect/opentelemetry";
|
|
2
3
|
export * from "./handler.mjs";
|
|
3
4
|
export { createEffectOperationContext, useEffectContext, useOperationContext } from "./context.mjs";
|
|
5
|
+
export { __rspack_external__effect_opentelemetry_8bbbb5af as OpenTelemetry };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import "node:module";
|
|
2
2
|
import { HttpApi } from "effect/unstable/httpapi";
|
|
3
3
|
import { createHttpApiHandler } from "./handler.mjs";
|
|
4
|
+
import * as __rspack_external_effect_Context_f1289ca3 from "effect/Context";
|
|
4
5
|
function isRecord(value) {
|
|
5
6
|
return 'object' == typeof value && null !== value;
|
|
6
7
|
}
|
|
@@ -13,15 +14,29 @@ function isRequestHandler(value) {
|
|
|
13
14
|
function isEffectApiDefinition(module) {
|
|
14
15
|
return HttpApi.isHttpApi(module.api) && void 0 !== module.layer;
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
17
|
+
function isEffectServiceContext(context) {
|
|
18
|
+
return 'object' == typeof context && null !== context && 'mapUnsafe' in context;
|
|
19
|
+
}
|
|
20
|
+
const emptyEffectServiceContext = __rspack_external_effect_Context_f1289ca3.empty();
|
|
21
|
+
function callEffectBffRequestHandler(handler, request, context) {
|
|
22
|
+
return void 0 === context ? handler(request) : handler(request, context);
|
|
23
|
+
}
|
|
24
|
+
function createLoadedHandler(webHandler) {
|
|
25
|
+
return {
|
|
26
|
+
handler: (request, context)=>callEffectBffRequestHandler(webHandler.handler, request, context),
|
|
27
|
+
dispose: webHandler.dispose
|
|
24
28
|
};
|
|
29
|
+
}
|
|
30
|
+
function createLoadedHttpApiHandler(webHandler) {
|
|
31
|
+
return {
|
|
32
|
+
handler: (request, context)=>{
|
|
33
|
+
const effectContext = isEffectServiceContext(context) ? context : emptyEffectServiceContext;
|
|
34
|
+
return webHandler.handler(request, effectContext);
|
|
35
|
+
},
|
|
36
|
+
dispose: webHandler.dispose
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function resolveNormalizedEffectBffModuleHandler(normalizedModule, options = {}) {
|
|
25
40
|
if (isRequestHandler(normalizedModule.handler)) return {
|
|
26
41
|
handler: normalizedModule.handler
|
|
27
42
|
};
|
|
@@ -29,13 +44,6 @@ async function resolveEffectBffModuleHandler(mod, options = {}) {
|
|
|
29
44
|
if (isRequestHandler(entry)) return {
|
|
30
45
|
handler: entry
|
|
31
46
|
};
|
|
32
|
-
if ('function' == typeof entry && 0 === entry.length) {
|
|
33
|
-
const out = await entry();
|
|
34
|
-
if (isRequestHandler(out)) return {
|
|
35
|
-
handler: out
|
|
36
|
-
};
|
|
37
|
-
mergeRuntimeExports(out);
|
|
38
|
-
}
|
|
39
47
|
if (isRecord(entry)) normalizedModule = {
|
|
40
48
|
...normalizedModule,
|
|
41
49
|
...entry
|
|
@@ -55,12 +63,7 @@ async function resolveEffectBffModuleHandler(mod, options = {}) {
|
|
|
55
63
|
openapi: options.openapi,
|
|
56
64
|
dataPlatform: options.dataPlatform
|
|
57
65
|
});
|
|
58
|
-
return
|
|
59
|
-
handler: async (request, context)=>webHandler.handler(request, context),
|
|
60
|
-
dispose: async ()=>{
|
|
61
|
-
await webHandler.dispose();
|
|
62
|
-
}
|
|
63
|
-
};
|
|
66
|
+
return createLoadedHandler(webHandler);
|
|
64
67
|
}
|
|
65
68
|
if (isEffectApiDefinition(normalizedModule)) {
|
|
66
69
|
options.onWarning?.('[BFF][Effect] Detected { api, layer } export without createHandler. Prefer `defineEffectBff(...)` from @modern-js/plugin-bff/server to avoid module instance mismatch.');
|
|
@@ -70,13 +73,33 @@ async function resolveEffectBffModuleHandler(mod, options = {}) {
|
|
|
70
73
|
openapi: options.openapi,
|
|
71
74
|
dataPlatform: options.dataPlatform
|
|
72
75
|
});
|
|
73
|
-
return
|
|
74
|
-
handler: async (request, context)=>webHandler.handler(request, context),
|
|
75
|
-
dispose: async ()=>{
|
|
76
|
-
await webHandler.dispose();
|
|
77
|
-
}
|
|
78
|
-
};
|
|
76
|
+
return createLoadedHttpApiHandler(webHandler);
|
|
79
77
|
}
|
|
80
78
|
return null;
|
|
81
79
|
}
|
|
80
|
+
function resolveEffectBffModuleHandler(mod, options = {}) {
|
|
81
|
+
let normalizedModule = mod;
|
|
82
|
+
const mergeRuntimeExports = (value)=>{
|
|
83
|
+
if (!isRecord(value) || !includesRuntimeExports(value)) return;
|
|
84
|
+
normalizedModule = {
|
|
85
|
+
...normalizedModule,
|
|
86
|
+
...value
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
if (isRequestHandler(normalizedModule.handler)) return Promise.resolve({
|
|
90
|
+
handler: normalizedModule.handler
|
|
91
|
+
});
|
|
92
|
+
const entry = normalizedModule.default;
|
|
93
|
+
if (isRequestHandler(entry)) return Promise.resolve({
|
|
94
|
+
handler: entry
|
|
95
|
+
});
|
|
96
|
+
if ('function' == typeof entry && 0 === entry.length) return Promise.resolve(entry()).then((out)=>{
|
|
97
|
+
if (isRequestHandler(out)) return {
|
|
98
|
+
handler: out
|
|
99
|
+
};
|
|
100
|
+
mergeRuntimeExports(out);
|
|
101
|
+
return resolveNormalizedEffectBffModuleHandler(normalizedModule, options);
|
|
102
|
+
});
|
|
103
|
+
return Promise.resolve(resolveNormalizedEffectBffModuleHandler(normalizedModule, options));
|
|
104
|
+
}
|
|
82
105
|
export { resolveEffectBffModuleHandler };
|
|
@@ -56,7 +56,7 @@ function makeEffectHttpApiClient(api, options) {
|
|
|
56
56
|
for (const [header, value] of Object.entries(requestContextHeaders))if (void 0 === nextRequest.headers[header.toLowerCase()]) nextRequest = HttpClientRequest.setHeader(nextRequest, header, value);
|
|
57
57
|
return nextRequest;
|
|
58
58
|
}));
|
|
59
|
-
return options?.transformClient ? options.transformClient(contextClient) : contextClient;
|
|
59
|
+
return 'function' == typeof options?.transformClient ? options.transformClient(contextClient) : contextClient;
|
|
60
60
|
};
|
|
61
61
|
return HttpApiClient.make(api, {
|
|
62
62
|
baseUrl: options?.baseUrl,
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import type { FileSystem, Path } from 'effect';
|
|
2
|
+
import * as Context from 'effect/Context';
|
|
1
3
|
import type * as EffectType from 'effect/Effect';
|
|
2
4
|
import * as Layer from 'effect/Layer';
|
|
5
|
+
import { Etag, HttpPlatform, HttpRouter } from 'effect/unstable/http';
|
|
3
6
|
import { type HttpApi, type HttpApiClient, type HttpApiGroup } from 'effect/unstable/httpapi';
|
|
4
7
|
import { type Rpc, type RpcGroup } from 'effect/unstable/rpc';
|
|
5
|
-
export * as OpenTelemetry from '@effect/opentelemetry';
|
|
6
8
|
export * as Config from 'effect/Config';
|
|
7
9
|
export * as Effect from 'effect/Effect';
|
|
8
10
|
export * as Layer from 'effect/Layer';
|
|
@@ -13,7 +15,8 @@ export { HttpTraceContext } from 'effect/unstable/http';
|
|
|
13
15
|
export * from 'effect/unstable/httpapi';
|
|
14
16
|
export { HttpApiBuilder } from 'effect/unstable/httpapi';
|
|
15
17
|
export * from 'effect/unstable/rpc';
|
|
16
|
-
export type
|
|
18
|
+
export type EffectRuntimeRequirements = Etag.Generator | FileSystem.FileSystem | HttpPlatform.HttpPlatform | HttpRouter.HttpRouter | HttpRouter.Request<'Error', any> | HttpRouter.Request<'GlobalError', any> | HttpRouter.Request<'GlobalRequires', any> | HttpRouter.Request<'Requires', any> | Path.Path;
|
|
19
|
+
export type EffectRuntimeLayer = Layer.Layer<never, never, EffectRuntimeRequirements>;
|
|
17
20
|
export type EffectRpcSerialization = 'json' | 'ndjson' | 'jsonRpc' | 'ndJsonRpc' | 'msgPack';
|
|
18
21
|
export type EffectRpcRuntimeLayer<TRpcs extends Rpc.Any = Rpc.Any> = Layer.Layer<Rpc.ToHandler<TRpcs> | Rpc.Middleware<TRpcs> | Rpc.ServicesServer<TRpcs>, unknown, never>;
|
|
19
22
|
export type EffectRpcBffDefinition<TRpcs extends Rpc.Any = Rpc.Any, TRpcLayer extends EffectRpcRuntimeLayer<TRpcs> = EffectRpcRuntimeLayer<TRpcs>> = {
|
|
@@ -141,7 +144,7 @@ export type EffectBffOpenApiConfig = boolean | {
|
|
|
141
144
|
};
|
|
142
145
|
export type EffectRpcBffHandlerFactory<TRpcs extends Rpc.Any = Rpc.Any> = (options?: Partial<EffectRpcBffHandlerOptions>) => ReturnType<typeof createRpcApiHandler<TRpcs>>;
|
|
143
146
|
declare function createRpcApiHandler<TRpcs extends Rpc.Any = Rpc.Any>(options: EffectRpcBffDefinition<TRpcs>): {
|
|
144
|
-
readonly handler: (request: globalThis.Request, context?:
|
|
147
|
+
readonly handler: (request: globalThis.Request, context?: Context.Context<never> | undefined) => Promise<Response>;
|
|
145
148
|
readonly dispose: () => Promise<void>;
|
|
146
149
|
};
|
|
147
150
|
export declare function defineEffectBff<TApi extends HttpApi.AnyWithProps, TLayer extends EffectRuntimeLayer, TRpcs extends Rpc.Any = Rpc.Any>(definition: {
|
|
@@ -165,6 +168,6 @@ export declare function createHttpApiHandler<TApi extends HttpApi.AnyWithProps =
|
|
|
165
168
|
rpc?: EffectRpcBffDefinition<TRpcs>;
|
|
166
169
|
dataPlatform?: EffectDataPlatformValidationOptions;
|
|
167
170
|
}): {
|
|
168
|
-
handler: (request: Request, context?: Parameters<(request: globalThis.Request, context:
|
|
171
|
+
handler: (request: Request, context?: Parameters<(request: globalThis.Request, context: Context.Context<any>) => Promise<Response>>[1]) => Promise<Response>;
|
|
169
172
|
dispose: () => Promise<void>;
|
|
170
173
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type * as EffectServiceContext from 'effect/Context';
|
|
2
2
|
import { type EffectBffOpenApiConfig, type EffectDataPlatformValidationOptions } from './handler';
|
|
3
3
|
import type { EffectContext } from './operation-context';
|
|
4
|
-
export type EffectBffRequestHandler = (request: Request, context?: EffectServiceContext.Context<
|
|
4
|
+
export type EffectBffRequestHandler = (request: Request, context?: EffectServiceContext.Context<any> | EffectContext) => Promise<Response> | Response;
|
|
5
5
|
export type EffectBffHandlerFactory = (options?: {
|
|
6
6
|
openapi?: EffectBffOpenApiConfig;
|
|
7
7
|
dataPlatform?: EffectDataPlatformValidationOptions;
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"modern",
|
|
18
18
|
"modern.js"
|
|
19
19
|
],
|
|
20
|
-
"version": "3.2.0-ultramodern.
|
|
20
|
+
"version": "3.2.0-ultramodern.105",
|
|
21
21
|
"types": "./dist/types/cli.d.ts",
|
|
22
22
|
"main": "./dist/cjs/cli.js",
|
|
23
23
|
"exports": {
|
|
@@ -145,12 +145,12 @@
|
|
|
145
145
|
"effect": "4.0.0-beta.66",
|
|
146
146
|
"qs": "^6.15.2",
|
|
147
147
|
"type-is": "^2.1.0",
|
|
148
|
-
"@modern-js/
|
|
149
|
-
"@modern-js/bff-core": "npm:@bleedingdev/modern-js-bff-core@3.2.0-ultramodern.
|
|
150
|
-
"@modern-js/
|
|
151
|
-
"@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.2.0-ultramodern.
|
|
152
|
-
"@modern-js/server-utils": "npm:@bleedingdev/modern-js-server-utils@3.2.0-ultramodern.
|
|
153
|
-
"@modern-js/builder": "npm:@bleedingdev/modern-js-builder@3.2.0-ultramodern.
|
|
148
|
+
"@modern-js/server-core": "npm:@bleedingdev/modern-js-server-core@3.2.0-ultramodern.105",
|
|
149
|
+
"@modern-js/bff-core": "npm:@bleedingdev/modern-js-bff-core@3.2.0-ultramodern.105",
|
|
150
|
+
"@modern-js/create-request": "npm:@bleedingdev/modern-js-create-request@3.2.0-ultramodern.105",
|
|
151
|
+
"@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.2.0-ultramodern.105",
|
|
152
|
+
"@modern-js/server-utils": "npm:@bleedingdev/modern-js-server-utils@3.2.0-ultramodern.105",
|
|
153
|
+
"@modern-js/builder": "npm:@bleedingdev/modern-js-builder@3.2.0-ultramodern.105"
|
|
154
154
|
},
|
|
155
155
|
"devDependencies": {
|
|
156
156
|
"@rsbuild/core": "2.0.10",
|
|
@@ -158,14 +158,14 @@
|
|
|
158
158
|
"@types/node": "^25.9.1",
|
|
159
159
|
"@types/qs": "^6.15.1",
|
|
160
160
|
"@types/type-is": "^1.6.7",
|
|
161
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
161
|
+
"@typescript/native-preview": "7.0.0-dev.20260606.1",
|
|
162
162
|
"memfs": "^4.57.2",
|
|
163
163
|
"zod": "^4.4.3",
|
|
164
|
-
"@modern-js/app-tools": "npm:@bleedingdev/modern-js-app-tools@3.2.0-ultramodern.
|
|
165
|
-
"@modern-js/
|
|
166
|
-
"@modern-js/
|
|
167
|
-
"@modern-js/runtime": "npm:@bleedingdev/modern-js-runtime@3.2.0-ultramodern.
|
|
168
|
-
"@modern-js/types": "npm:@bleedingdev/modern-js-types@3.2.0-ultramodern.
|
|
164
|
+
"@modern-js/app-tools": "npm:@bleedingdev/modern-js-app-tools@3.2.0-ultramodern.105",
|
|
165
|
+
"@modern-js/bff-runtime": "npm:@bleedingdev/modern-js-bff-runtime@3.2.0-ultramodern.105",
|
|
166
|
+
"@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.2.0-ultramodern.105",
|
|
167
|
+
"@modern-js/runtime": "npm:@bleedingdev/modern-js-runtime@3.2.0-ultramodern.105",
|
|
168
|
+
"@modern-js/types": "npm:@bleedingdev/modern-js-types@3.2.0-ultramodern.105",
|
|
169
169
|
"@scripts/rstest-config": "2.66.0"
|
|
170
170
|
},
|
|
171
171
|
"sideEffects": false,
|