@bleedingdev/modern-js-plugin-bff 3.2.0-ultramodern.12 → 3.2.0-ultramodern.120

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.
Files changed (58) hide show
  1. package/dist/cjs/cli.js +9 -5
  2. package/dist/cjs/constants.js +13 -9
  3. package/dist/cjs/index.js +9 -5
  4. package/dist/cjs/loader.js +32 -5
  5. package/dist/cjs/runtime/create-request/index.js +9 -5
  6. package/dist/cjs/runtime/data-platform/index.js +48 -13
  7. package/dist/cjs/runtime/effect/adapter.js +24 -87
  8. package/dist/cjs/runtime/effect/context.js +19 -7
  9. package/dist/cjs/runtime/effect/edge.js +173 -0
  10. package/dist/cjs/runtime/effect/handler.js +597 -0
  11. package/dist/cjs/runtime/effect/index.js +30 -547
  12. package/dist/cjs/runtime/effect/module.js +142 -0
  13. package/dist/cjs/runtime/effect/operation-context.js +115 -0
  14. package/dist/cjs/runtime/effect-client/index.js +22 -6
  15. package/dist/cjs/runtime/hono/adapter.js +9 -5
  16. package/dist/cjs/runtime/hono/index.js +9 -5
  17. package/dist/cjs/runtime/hono/operators.js +9 -5
  18. package/dist/cjs/server.js +9 -5
  19. package/dist/cjs/utils/clientGenerator.js +9 -5
  20. package/dist/cjs/utils/createHonoRoutes.js +9 -5
  21. package/dist/cjs/utils/crossProjectApiPlugin.js +9 -5
  22. package/dist/cjs/utils/effectClientGenerator.js +26 -5
  23. package/dist/cjs/utils/pluginGenerator.js +9 -5
  24. package/dist/cjs/utils/runtimeGenerator.js +9 -5
  25. package/dist/esm/loader.mjs +23 -0
  26. package/dist/esm/runtime/data-platform/index.mjs +31 -9
  27. package/dist/esm/runtime/effect/adapter.mjs +16 -83
  28. package/dist/esm/runtime/effect/context.mjs +3 -1
  29. package/dist/esm/runtime/effect/edge.mjs +90 -0
  30. package/dist/esm/runtime/effect/handler.mjs +438 -0
  31. package/dist/esm/runtime/effect/index.mjs +3 -437
  32. package/dist/esm/runtime/effect/module.mjs +104 -0
  33. package/dist/esm/runtime/effect/operation-context.mjs +77 -0
  34. package/dist/esm/runtime/effect-client/index.mjs +14 -2
  35. package/dist/esm/utils/effectClientGenerator.mjs +17 -0
  36. package/dist/esm-node/loader.mjs +23 -0
  37. package/dist/esm-node/runtime/data-platform/index.mjs +31 -9
  38. package/dist/esm-node/runtime/effect/adapter.mjs +16 -83
  39. package/dist/esm-node/runtime/effect/context.mjs +3 -1
  40. package/dist/esm-node/runtime/effect/edge.mjs +91 -0
  41. package/dist/esm-node/runtime/effect/handler.mjs +439 -0
  42. package/dist/esm-node/runtime/effect/index.mjs +3 -437
  43. package/dist/esm-node/runtime/effect/module.mjs +105 -0
  44. package/dist/esm-node/runtime/effect/operation-context.mjs +78 -0
  45. package/dist/esm-node/runtime/effect-client/index.mjs +14 -2
  46. package/dist/esm-node/utils/effectClientGenerator.mjs +17 -0
  47. package/dist/types/runtime/create-request/index.d.ts +1 -0
  48. package/dist/types/runtime/data-platform/index.d.ts +4 -0
  49. package/dist/types/runtime/effect/context.d.ts +3 -6
  50. package/dist/types/runtime/effect/edge.d.ts +25 -0
  51. package/dist/types/runtime/effect/handler.d.ts +173 -0
  52. package/dist/types/runtime/effect/index.d.ts +2 -170
  53. package/dist/types/runtime/effect/module.d.ts +28 -0
  54. package/dist/types/runtime/effect/operation-context.d.ts +10 -0
  55. package/dist/types/runtime/effect-client/index.d.ts +6 -1
  56. package/dist/types/utils/createHonoRoutes.d.ts +3 -3
  57. package/dist/types/utils/effectClientGenerator.d.ts +1 -1
  58. package/package.json +29 -20
package/dist/cjs/cli.js CHANGED
@@ -10,11 +10,15 @@ var __webpack_require__ = {};
10
10
  };
11
11
  })();
12
12
  (()=>{
13
- __webpack_require__.d = (exports1, definition)=>{
14
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
- enumerable: true,
16
- get: definition[key]
17
- });
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
18
22
  };
19
23
  })();
20
24
  (()=>{
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
3
  (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -23,10 +27,6 @@ var __webpack_require__ = {};
23
27
  })();
24
28
  var __webpack_exports__ = {};
25
29
  __webpack_require__.r(__webpack_exports__);
26
- __webpack_require__.d(__webpack_exports__, {
27
- API_APP_NAME: ()=>API_APP_NAME,
28
- BUILD_FILES: ()=>BUILD_FILES
29
- });
30
30
  const API_APP_NAME = '_app';
31
31
  const BUILD_FILES = [
32
32
  '**/*.[tj]sx?',
@@ -37,6 +37,10 @@ const BUILD_FILES = [
37
37
  '!__tests__/*.tsx?',
38
38
  '!__tests__/*.jsx?'
39
39
  ];
40
+ __webpack_require__.d(__webpack_exports__, {}, {
41
+ API_APP_NAME: API_APP_NAME,
42
+ BUILD_FILES: BUILD_FILES
43
+ });
40
44
  exports.API_APP_NAME = __webpack_exports__.API_APP_NAME;
41
45
  exports.BUILD_FILES = __webpack_exports__.BUILD_FILES;
42
46
  for(var __rspack_i in __webpack_exports__)if (-1 === [
package/dist/cjs/index.js CHANGED
@@ -24,11 +24,15 @@ function __webpack_require__(moduleId) {
24
24
  };
25
25
  })();
26
26
  (()=>{
27
- __webpack_require__.d = (exports1, definition)=>{
28
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
29
- enumerable: true,
30
- get: definition[key]
31
- });
27
+ __webpack_require__.d = (exports1, getters, values)=>{
28
+ var define = (defs, kind)=>{
29
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
30
+ enumerable: true,
31
+ [kind]: defs[key]
32
+ });
33
+ };
34
+ define(getters, "get");
35
+ define(values, "value");
32
36
  };
33
37
  })();
34
38
  (()=>{
@@ -10,11 +10,15 @@ var __webpack_require__ = {};
10
10
  };
11
11
  })();
12
12
  (()=>{
13
- __webpack_require__.d = (exports1, definition)=>{
14
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
- enumerable: true,
16
- get: definition[key]
17
- });
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
18
22
  };
19
23
  })();
20
24
  (()=>{
@@ -40,6 +44,24 @@ const utils_namespaceObject = require("@modern-js/utils");
40
44
  const external_path_namespaceObject = require("path");
41
45
  var external_path_default = /*#__PURE__*/ __webpack_require__.n(external_path_namespaceObject);
42
46
  const effectClientGenerator_js_namespaceObject = require("./utils/effectClientGenerator.js");
47
+ async function transformEffectRuntimeSource(source, filename) {
48
+ const swc = await import("@swc/core");
49
+ const result = await swc.transform(source, {
50
+ filename,
51
+ sourceMaps: false,
52
+ jsc: {
53
+ parser: {
54
+ syntax: "typescript",
55
+ tsx: filename.endsWith('.tsx') || filename.endsWith('.jsx')
56
+ },
57
+ target: 'es2022'
58
+ },
59
+ module: {
60
+ type: 'es6'
61
+ }
62
+ });
63
+ return result.code;
64
+ }
43
65
  async function loader(source) {
44
66
  this.cacheable();
45
67
  const { resourcePath } = this;
@@ -51,6 +73,11 @@ async function loader(source) {
51
73
  apiDir: draftOptions.apiDir,
52
74
  effectEntry: draftOptions.effectEntry
53
75
  });
76
+ if ('effect' === draftOptions.bffRuntimeFramework && effectEntryFile && external_path_default().resolve(effectEntryFile) === external_path_default().resolve(resourcePath) && this.resourceQuery.includes('modern-bff-runtime')) {
77
+ const code = await transformEffectRuntimeSource(source, resourcePath);
78
+ callback(void 0, code);
79
+ return;
80
+ }
54
81
  if ('effect' === draftOptions.bffRuntimeFramework && effectEntryFile && external_path_default().resolve(effectEntryFile) === external_path_default().resolve(resourcePath)) {
55
82
  const code = await (0, effectClientGenerator_js_namespaceObject.generateEffectClientCode)({
56
83
  appDir: draftOptions.appDir,
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
3
  (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
3
  (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -24,18 +28,21 @@ var __webpack_require__ = {};
24
28
  var __webpack_exports__ = {};
25
29
  __webpack_require__.r(__webpack_exports__);
26
30
  __webpack_require__.d(__webpack_exports__, {
31
+ DATA_BATCH_TRANSPORT_OTEL_EVENT: ()=>DATA_BATCH_TRANSPORT_OTEL_EVENT,
27
32
  DEFAULT_DATA_BATCH_ENDPOINT: ()=>DEFAULT_DATA_BATCH_ENDPOINT,
28
33
  DEFAULT_DATA_BATCH_HEADER: ()=>DEFAULT_DATA_BATCH_HEADER,
29
34
  DEFAULT_DATA_ENVELOPE_HEADER: ()=>DEFAULT_DATA_ENVELOPE_HEADER,
30
35
  buildQueryKey: ()=>buildQueryKey,
31
36
  buildScopeKey: ()=>buildScopeKey,
32
37
  createDataBatchTransport: ()=>createDataBatchTransport,
38
+ createDataBatchTransportTelemetryAttributes: ()=>createDataBatchTransportTelemetryAttributes,
33
39
  createHydrationEnvelope: ()=>createHydrationEnvelope,
34
40
  createInvalidationEvent: ()=>createInvalidationEvent,
35
41
  createOperationId: ()=>createOperationId,
36
42
  createRequestEnvelope: ()=>createRequestEnvelope,
37
43
  decodeRequestEnvelopeHeader: ()=>decodeRequestEnvelopeHeader,
38
44
  deriveChildTraceContext: ()=>deriveChildTraceContext,
45
+ emitDataBatchTransportEvent: ()=>emitDataBatchTransportEvent,
39
46
  encodeRequestEnvelopeHeader: ()=>encodeRequestEnvelopeHeader,
40
47
  formatTraceparentHeader: ()=>formatTraceparentHeader,
41
48
  normalizeOrigin: ()=>normalizeOrigin,
@@ -46,6 +53,28 @@ __webpack_require__.d(__webpack_exports__, {
46
53
  validateRequestEnvelope: ()=>validateRequestEnvelope,
47
54
  validateSelectionPlan: ()=>validateSelectionPlan
48
55
  });
56
+ const api_namespaceObject = require("@opentelemetry/api");
57
+ const DATA_BATCH_TRANSPORT_OTEL_EVENT = 'modernjs.data.batch';
58
+ function createDataBatchTransportTelemetryAttributes(event) {
59
+ return {
60
+ 'modernjs.data.batch.type': event.type,
61
+ 'modernjs.data.batch.endpoint': event.endpoint,
62
+ 'modernjs.data.batch.degraded': 'fallback' === event.type || 'disable' === event.type,
63
+ ...event.batchId ? {
64
+ 'modernjs.data.batch.id': event.batchId
65
+ } : {},
66
+ ...'number' == typeof event.size ? {
67
+ 'modernjs.data.batch.size': event.size
68
+ } : {},
69
+ ...event.reason ? {
70
+ 'modernjs.data.batch.reason': event.reason
71
+ } : {}
72
+ };
73
+ }
74
+ function emitDataBatchTransportEvent(onEvent, event) {
75
+ onEvent?.(event);
76
+ api_namespaceObject.trace.getActiveSpan()?.addEvent(DATA_BATCH_TRANSPORT_OTEL_EVENT, createDataBatchTransportTelemetryAttributes(event));
77
+ }
49
78
  const DEFAULT_DATA_ENVELOPE_HEADER = 'x-modernjs-data-envelope';
50
79
  const DEFAULT_DATA_BATCH_ENDPOINT = '/_data/batch';
51
80
  const DEFAULT_DATA_BATCH_HEADER = 'x-modernjs-data-batch';
@@ -463,7 +492,7 @@ function createDataBatchTransport(options = {}) {
463
492
  bucket.items = [];
464
493
  bucket.bytes = 0;
465
494
  if (1 === items.length || disabledEndpoints.has(endpoint)) {
466
- onEvent?.({
495
+ emitDataBatchTransportEvent(onEvent, {
467
496
  type: disabledEndpoints.has(endpoint) ? 'fallback' : 'flush',
468
497
  endpoint,
469
498
  size: items.length,
@@ -480,7 +509,7 @@ function createDataBatchTransport(options = {}) {
480
509
  sentAt: Date.now(),
481
510
  items: items.map((item)=>item.item)
482
511
  };
483
- onEvent?.({
512
+ emitDataBatchTransportEvent(onEvent, {
484
513
  type: 'flush',
485
514
  endpoint,
486
515
  batchId,
@@ -507,7 +536,7 @@ function createDataBatchTransport(options = {}) {
507
536
  requestInit.signal = controller.signal;
508
537
  timeoutHandle = setTimeout(()=>{
509
538
  controller.abort();
510
- onEvent?.({
539
+ emitDataBatchTransportEvent(onEvent, {
511
540
  type: 'fallback',
512
541
  endpoint,
513
542
  batchId,
@@ -520,13 +549,13 @@ function createDataBatchTransport(options = {}) {
520
549
  if (!response.ok) {
521
550
  if (404 === response.status || 405 === response.status) {
522
551
  disabledEndpoints.add(endpoint);
523
- onEvent?.({
552
+ emitDataBatchTransportEvent(onEvent, {
524
553
  type: 'disable',
525
554
  endpoint,
526
555
  batchId,
527
556
  reason: `batch-endpoint-unavailable-${String(response.status)}`
528
557
  });
529
- } else onEvent?.({
558
+ } else emitDataBatchTransportEvent(onEvent, {
530
559
  type: 'fallback',
531
560
  endpoint,
532
561
  batchId,
@@ -539,7 +568,7 @@ function createDataBatchTransport(options = {}) {
539
568
  }
540
569
  const result = await response.json();
541
570
  if (!isBatchResponsePayload(result)) {
542
- onEvent?.({
571
+ emitDataBatchTransportEvent(onEvent, {
543
572
  type: 'fallback',
544
573
  endpoint,
545
574
  batchId,
@@ -562,7 +591,7 @@ function createDataBatchTransport(options = {}) {
562
591
  return parseResponseLikeCreateRequest(reconstructedResponse);
563
592
  });
564
593
  } catch (error) {
565
- onEvent?.({
594
+ emitDataBatchTransportEvent(onEvent, {
566
595
  type: 'fallback',
567
596
  endpoint,
568
597
  batchId,
@@ -629,7 +658,7 @@ function createDataBatchTransport(options = {}) {
629
658
  };
630
659
  bucket.items.push(queued);
631
660
  bucket.bytes += size;
632
- onEvent?.({
661
+ emitDataBatchTransportEvent(onEvent, {
633
662
  type: 'enqueue',
634
663
  endpoint,
635
664
  size: bucket.items.length
@@ -644,18 +673,21 @@ function createDataBatchTransport(options = {}) {
644
673
  return promise;
645
674
  };
646
675
  }
676
+ exports.DATA_BATCH_TRANSPORT_OTEL_EVENT = __webpack_exports__.DATA_BATCH_TRANSPORT_OTEL_EVENT;
647
677
  exports.DEFAULT_DATA_BATCH_ENDPOINT = __webpack_exports__.DEFAULT_DATA_BATCH_ENDPOINT;
648
678
  exports.DEFAULT_DATA_BATCH_HEADER = __webpack_exports__.DEFAULT_DATA_BATCH_HEADER;
649
679
  exports.DEFAULT_DATA_ENVELOPE_HEADER = __webpack_exports__.DEFAULT_DATA_ENVELOPE_HEADER;
650
680
  exports.buildQueryKey = __webpack_exports__.buildQueryKey;
651
681
  exports.buildScopeKey = __webpack_exports__.buildScopeKey;
652
682
  exports.createDataBatchTransport = __webpack_exports__.createDataBatchTransport;
683
+ exports.createDataBatchTransportTelemetryAttributes = __webpack_exports__.createDataBatchTransportTelemetryAttributes;
653
684
  exports.createHydrationEnvelope = __webpack_exports__.createHydrationEnvelope;
654
685
  exports.createInvalidationEvent = __webpack_exports__.createInvalidationEvent;
655
686
  exports.createOperationId = __webpack_exports__.createOperationId;
656
687
  exports.createRequestEnvelope = __webpack_exports__.createRequestEnvelope;
657
688
  exports.decodeRequestEnvelopeHeader = __webpack_exports__.decodeRequestEnvelopeHeader;
658
689
  exports.deriveChildTraceContext = __webpack_exports__.deriveChildTraceContext;
690
+ exports.emitDataBatchTransportEvent = __webpack_exports__.emitDataBatchTransportEvent;
659
691
  exports.encodeRequestEnvelopeHeader = __webpack_exports__.encodeRequestEnvelopeHeader;
660
692
  exports.formatTraceparentHeader = __webpack_exports__.formatTraceparentHeader;
661
693
  exports.normalizeOrigin = __webpack_exports__.normalizeOrigin;
@@ -666,18 +698,21 @@ exports.validateHydrationEnvelope = __webpack_exports__.validateHydrationEnvelop
666
698
  exports.validateRequestEnvelope = __webpack_exports__.validateRequestEnvelope;
667
699
  exports.validateSelectionPlan = __webpack_exports__.validateSelectionPlan;
668
700
  for(var __rspack_i in __webpack_exports__)if (-1 === [
701
+ "DATA_BATCH_TRANSPORT_OTEL_EVENT",
669
702
  "DEFAULT_DATA_BATCH_ENDPOINT",
670
703
  "DEFAULT_DATA_BATCH_HEADER",
671
704
  "DEFAULT_DATA_ENVELOPE_HEADER",
672
705
  "buildQueryKey",
673
706
  "buildScopeKey",
674
707
  "createDataBatchTransport",
708
+ "createDataBatchTransportTelemetryAttributes",
675
709
  "createHydrationEnvelope",
676
710
  "createInvalidationEvent",
677
711
  "createOperationId",
678
712
  "createRequestEnvelope",
679
713
  "decodeRequestEnvelopeHeader",
680
714
  "deriveChildTraceContext",
715
+ "emitDataBatchTransportEvent",
681
716
  "encodeRequestEnvelopeHeader",
682
717
  "formatTraceparentHeader",
683
718
  "normalizeOrigin",
@@ -10,11 +10,15 @@ var __webpack_require__ = {};
10
10
  };
11
11
  })();
12
12
  (()=>{
13
- __webpack_require__.d = (exports1, definition)=>{
14
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
- enumerable: true,
16
- get: definition[key]
17
- });
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
18
22
  };
19
23
  })();
20
24
  (()=>{
@@ -36,11 +40,10 @@ __webpack_require__.d(__webpack_exports__, {
36
40
  EffectAdapter: ()=>EffectAdapter
37
41
  });
38
42
  const utils_namespaceObject = require("@modern-js/utils");
39
- const httpapi_namespaceObject = require("effect/unstable/httpapi");
40
43
  const external_path_namespaceObject = require("path");
41
44
  var external_path_default = /*#__PURE__*/ __webpack_require__.n(external_path_namespaceObject);
42
45
  const external_context_js_namespaceObject = require("./context.js");
43
- const external_index_js_namespaceObject = require("./index.js");
46
+ const external_module_js_namespaceObject = require("./module.js");
44
47
  const before = [
45
48
  'custom-server-hook',
46
49
  'custom-server-middleware',
@@ -73,24 +76,9 @@ function createRequestForMountedPrefix(req, prefix) {
73
76
  url.pathname = nextPath;
74
77
  return new Request(url, req);
75
78
  }
76
- function isRequestHandler(value) {
77
- return 'function' == typeof value;
78
- }
79
79
  function maybeResponse(value) {
80
80
  return value instanceof Response;
81
81
  }
82
- function isRecord(value) {
83
- return 'object' == typeof value && null !== value;
84
- }
85
- function includesRuntimeExports(value) {
86
- return 'api' in value || 'layer' in value || 'createHandler' in value || 'handler' in value;
87
- }
88
- function isHttpApiWithProps(value) {
89
- return httpapi_namespaceObject.HttpApi.isHttpApi(value) && isRecord(value) && 'string' == typeof value.identifier && isRecord(value.groups);
90
- }
91
- function isEffectApiDefinition(module) {
92
- return isHttpApiWithProps(module.api) && void 0 !== module.layer;
93
- }
94
82
  class EffectAdapter {
95
83
  resolveEntryFile() {
96
84
  const { appDirectory, apiDirectory } = this.api.getServerContext();
@@ -101,70 +89,13 @@ class EffectAdapter {
101
89
  return (0, utils_namespaceObject.findExists)(JS_OR_TS_EXTS.map((ext)=>`${entryWithoutExt}${ext}`));
102
90
  }
103
91
  async loadEffectHandlerFromModule(mod) {
104
- let normalizedModule = mod;
105
- const mergeRuntimeExports = (value)=>{
106
- if (!isRecord(value) || !includesRuntimeExports(value)) return;
107
- normalizedModule = {
108
- ...normalizedModule,
109
- ...value
110
- };
111
- };
112
- if (isRequestHandler(normalizedModule.handler)) return {
113
- handler: normalizedModule.handler
114
- };
115
- const entry = normalizedModule.default;
116
- if (isRequestHandler(entry)) return {
117
- handler: entry
118
- };
119
- if ('function' == typeof entry && 0 === entry.length) {
120
- const out = await entry();
121
- if (isRequestHandler(out)) return {
122
- handler: out
123
- };
124
- mergeRuntimeExports(out);
125
- }
126
- if (isRecord(entry)) normalizedModule = {
127
- ...normalizedModule,
128
- ...entry
129
- };
130
- if (isRecord(entry) && 'handler' in entry) {
131
- const maybeHandler = entry.handler;
132
- if (isRequestHandler(maybeHandler)) normalizedModule = {
133
- ...normalizedModule,
134
- handler: maybeHandler
135
- };
136
- }
137
- if (isRequestHandler(normalizedModule.handler)) return {
138
- handler: normalizedModule.handler
139
- };
140
- if ('function' == typeof normalizedModule.createHandler) {
141
- const webHandler = normalizedModule.createHandler({
142
- openapi: this.api.getServerConfig()?.bff?.effect?.openapi,
143
- dataPlatform: this.api.getServerConfig()?.bff?.effect?.dataPlatform
144
- });
145
- return {
146
- handler: async (request)=>webHandler.handler(request),
147
- dispose: async ()=>{
148
- await webHandler.dispose();
149
- }
150
- };
151
- }
152
- if (isEffectApiDefinition(normalizedModule)) {
153
- utils_namespaceObject.logger.warn('[BFF][Effect] Detected { api, layer } export without createHandler. Prefer `defineEffectBff(...)` from @modern-js/plugin-bff/server to avoid module instance mismatch.');
154
- const webHandler = (0, external_index_js_namespaceObject.createHttpApiHandler)({
155
- api: normalizedModule.api,
156
- layer: normalizedModule.layer,
157
- openapi: this.api.getServerConfig()?.bff?.effect?.openapi,
158
- dataPlatform: this.api.getServerConfig()?.bff?.effect?.dataPlatform
159
- });
160
- return {
161
- handler: async (request)=>webHandler.handler(request),
162
- dispose: async ()=>{
163
- await webHandler.dispose();
164
- }
165
- };
166
- }
167
- return null;
92
+ return (0, external_module_js_namespaceObject.resolveEffectBffModuleHandler)(mod, {
93
+ openapi: this.api.getServerConfig()?.bff?.effect?.openapi,
94
+ dataPlatform: this.api.getServerConfig()?.bff?.effect?.dataPlatform,
95
+ onWarning: (message)=>{
96
+ utils_namespaceObject.logger.warn(message);
97
+ }
98
+ });
168
99
  }
169
100
  async reloadHandler() {
170
101
  if (!this.isEffect) return;
@@ -282,7 +213,13 @@ class EffectAdapter {
282
213
  request: effectRequest,
283
214
  env: c.env,
284
215
  path: c.req.path,
285
- method: c.req.method
216
+ method: c.req.method,
217
+ operationContext: (0, external_context_js_namespaceObject.createEffectOperationContext)({
218
+ request: effectRequest,
219
+ env: c.env,
220
+ path: c.req.path,
221
+ method: c.req.method
222
+ })
286
223
  };
287
224
  response = await (0, external_context_js_namespaceObject.runWithEffectContext)(effectContext, ()=>this.handler.length > 1 ? this.handler(effectRequest, effectContext) : this.handler(effectRequest));
288
225
  } catch (error) {
@@ -1,11 +1,15 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
3
  (()=>{
4
- __webpack_require__.d = (exports1, definition)=>{
5
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
- enumerable: true,
7
- get: definition[key]
8
- });
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
9
13
  };
10
14
  })();
11
15
  (()=>{
@@ -24,10 +28,13 @@ var __webpack_require__ = {};
24
28
  var __webpack_exports__ = {};
25
29
  __webpack_require__.r(__webpack_exports__);
26
30
  __webpack_require__.d(__webpack_exports__, {
31
+ createEffectOperationContext: ()=>external_operation_context_js_namespaceObject.createEffectOperationContext,
27
32
  runWithEffectContext: ()=>runWithEffectContext,
28
- useEffectContext: ()=>useEffectContext
33
+ useEffectContext: ()=>useEffectContext,
34
+ useOperationContext: ()=>useOperationContext
29
35
  });
30
36
  const external_node_async_hooks_namespaceObject = require("node:async_hooks");
37
+ const external_operation_context_js_namespaceObject = require("./operation-context.js");
31
38
  const kEffectContextStorage = Symbol.for('modernjs.plugin-bff.effectContextStorage');
32
39
  const globalStore = globalThis;
33
40
  const effectContextStorage = globalStore[kEffectContextStorage] ?? (globalStore[kEffectContextStorage] = new external_node_async_hooks_namespaceObject.AsyncLocalStorage());
@@ -37,11 +44,16 @@ const useEffectContext = ()=>{
37
44
  if (!context) throw new Error("Can't call useEffectContext out of Effect runtime scope");
38
45
  return context;
39
46
  };
47
+ const useOperationContext = ()=>useEffectContext().operationContext;
48
+ exports.createEffectOperationContext = __webpack_exports__.createEffectOperationContext;
40
49
  exports.runWithEffectContext = __webpack_exports__.runWithEffectContext;
41
50
  exports.useEffectContext = __webpack_exports__.useEffectContext;
51
+ exports.useOperationContext = __webpack_exports__.useOperationContext;
42
52
  for(var __rspack_i in __webpack_exports__)if (-1 === [
53
+ "createEffectOperationContext",
43
54
  "runWithEffectContext",
44
- "useEffectContext"
55
+ "useEffectContext",
56
+ "useOperationContext"
45
57
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
46
58
  Object.defineProperty(exports, '__esModule', {
47
59
  value: true