@bleedingdev/modern-js-plugin-bff 3.5.0-ultramodern.99 → 3.8.1-ultramodern.1
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/cli/compress.js +1 -1
- package/dist/cjs/cli/generator.js +106 -97
- package/dist/cjs/cli/serverGlobalVars.js +43 -57
- package/dist/cjs/cli.js +6 -2
- package/dist/cjs/loader.js +6 -5
- package/dist/cjs/runtime/effect/adapter/cross-project-policy.js +17 -12
- package/dist/cjs/runtime/effect/adapter/entry.js +13 -5
- package/dist/cjs/runtime/effect/adapter/error-response.js +11 -9
- package/dist/cjs/runtime/effect/adapter.js +2 -2
- package/dist/cjs/runtime/effect/backend-federation/load.js +26 -17
- package/dist/cjs/runtime/effect/backend-federation/plugin.js +12 -2
- package/dist/cjs/runtime/effect/backend-federation/remotes.js +5 -4
- package/dist/cjs/runtime/effect/backend-federation/runtime.js +80 -16
- package/dist/cjs/runtime/effect/edge-dispatcher.js +148 -0
- package/dist/cjs/runtime/effect/edge.js +19 -100
- package/dist/cjs/runtime/effect/handler/definition.js +1 -0
- package/dist/cjs/runtime/effect/handler/http.js +17 -6
- package/dist/cjs/utils/crossProjectApiPlugin.js +21 -2
- package/dist/cjs/utils/effect-client-generator/generator.js +17 -16
- package/dist/cjs/utils/effect-client-generator/paths.js +4 -15
- package/dist/cjs/utils/effect-client-generator/rendering.js +8 -19
- package/dist/cjs/utils/effect-client-generator/runtime.js +15 -32
- package/dist/cjs/utils/effectSourceLoader.js +70 -10
- package/dist/cjs/utils/pluginGenerator.js +4 -4
- package/dist/esm/cli/compress.mjs +1 -1
- package/dist/esm/cli/generator.mjs +108 -98
- package/dist/esm/cli/serverGlobalVars.mjs +44 -48
- package/dist/esm/cli.mjs +2 -0
- package/dist/esm/loader.mjs +6 -5
- package/dist/esm/runtime/effect/adapter/cross-project-policy.mjs +17 -12
- package/dist/esm/runtime/effect/adapter/entry.mjs +13 -5
- package/dist/esm/runtime/effect/adapter/error-response.mjs +11 -9
- package/dist/esm/runtime/effect/adapter.mjs +3 -3
- package/dist/esm/runtime/effect/backend-federation/load.mjs +26 -17
- package/dist/esm/runtime/effect/backend-federation/plugin.mjs +12 -2
- package/dist/esm/runtime/effect/backend-federation/remotes.mjs +5 -4
- package/dist/esm/runtime/effect/backend-federation/runtime.mjs +80 -16
- package/dist/esm/runtime/effect/edge-dispatcher.mjs +38 -0
- package/dist/esm/runtime/effect/edge.mjs +1 -38
- package/dist/esm/runtime/effect/handler/definition.mjs +1 -0
- package/dist/esm/runtime/effect/handler/http.mjs +17 -6
- package/dist/esm/utils/crossProjectApiPlugin.mjs +16 -3
- package/dist/esm/utils/effect-client-generator/generator.mjs +17 -16
- package/dist/esm/utils/effect-client-generator/paths.mjs +5 -6
- package/dist/esm/utils/effect-client-generator/rendering.mjs +9 -10
- package/dist/esm/utils/effect-client-generator/runtime.mjs +16 -23
- package/dist/esm/utils/effectSourceLoader.mjs +69 -12
- package/dist/esm/utils/pluginGenerator.mjs +5 -5
- package/dist/esm-node/cli/compress.mjs +1 -1
- package/dist/esm-node/cli/generator.mjs +108 -98
- package/dist/esm-node/cli/serverGlobalVars.mjs +44 -48
- package/dist/esm-node/cli.mjs +2 -0
- package/dist/esm-node/loader.mjs +6 -5
- package/dist/esm-node/runtime/effect/adapter/cross-project-policy.mjs +17 -12
- package/dist/esm-node/runtime/effect/adapter/entry.mjs +13 -5
- package/dist/esm-node/runtime/effect/adapter/error-response.mjs +11 -9
- package/dist/esm-node/runtime/effect/adapter.mjs +3 -3
- package/dist/esm-node/runtime/effect/backend-federation/load.mjs +26 -17
- package/dist/esm-node/runtime/effect/backend-federation/plugin.mjs +12 -2
- package/dist/esm-node/runtime/effect/backend-federation/remotes.mjs +5 -4
- package/dist/esm-node/runtime/effect/backend-federation/runtime.mjs +80 -16
- package/dist/esm-node/runtime/effect/edge-dispatcher.mjs +39 -0
- package/dist/esm-node/runtime/effect/edge.mjs +1 -38
- package/dist/esm-node/runtime/effect/handler/definition.mjs +1 -0
- package/dist/esm-node/runtime/effect/handler/http.mjs +17 -6
- package/dist/esm-node/utils/crossProjectApiPlugin.mjs +16 -3
- package/dist/esm-node/utils/effect-client-generator/generator.mjs +17 -16
- package/dist/esm-node/utils/effect-client-generator/paths.mjs +5 -6
- package/dist/esm-node/utils/effect-client-generator/rendering.mjs +9 -10
- package/dist/esm-node/utils/effect-client-generator/runtime.mjs +16 -23
- package/dist/esm-node/utils/effectSourceLoader.mjs +69 -12
- package/dist/esm-node/utils/pluginGenerator.mjs +5 -5
- package/dist/types/cli/generator.d.ts +2 -2
- package/dist/types/cli/serverGlobalVars.d.ts +4 -2
- package/dist/types/cli.d.ts +1 -0
- package/dist/types/runtime/effect/adapter/cross-project-policy.d.ts +1 -1
- package/dist/types/runtime/effect/backend-federation/runtime.d.ts +1 -1
- package/dist/types/runtime/effect/edge-dispatcher.d.ts +26 -0
- package/dist/types/runtime/effect/edge.d.ts +1 -26
- package/dist/types/runtime/effect/handler/definition.d.ts +2 -12
- package/dist/types/runtime/effect/handler/http.d.ts +2 -1
- package/dist/types/runtime/effect/handler/types.d.ts +5 -0
- package/dist/types/utils/crossProjectApiPlugin.d.ts +2 -0
- package/dist/types/utils/effectSourceLoader.d.ts +10 -0
- package/dist/types/utils/pluginGenerator.d.ts +3 -1
- package/package.json +34 -18
|
@@ -31,31 +31,40 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
31
31
|
loadBackendFederatedEffectApi: ()=>loadBackendFederatedEffectApi
|
|
32
32
|
});
|
|
33
33
|
const universal_namespaceObject = require("@modern-js/utils/universal");
|
|
34
|
+
const Effect_namespaceObject = require("effect/Effect");
|
|
35
|
+
const Logger_namespaceObject = require("effect/Logger");
|
|
34
36
|
const external_identity_js_namespaceObject = require("./identity.js");
|
|
35
37
|
const external_runtime_js_namespaceObject = require("./runtime.js");
|
|
36
38
|
const external_utils_js_namespaceObject = require("./utils.js");
|
|
37
39
|
const LEGACY_LOAD_WARNING = '[BFF][Effect] loadBackendFederatedEffectApi was called without an expected delivery-unit identity (expected.unitId + expected.buildMarker). Identity-less public backend loads are deprecated (ADR-0019/MV-G23) and will be rejected in a future major.';
|
|
38
|
-
|
|
40
|
+
const legacyWarningLogger = Logger_namespaceObject.withLeveledConsole(Logger_namespaceObject.formatLogFmt);
|
|
41
|
+
function warnLegacyLoad() {
|
|
42
|
+
Effect_namespaceObject.runSync(Effect_namespaceObject.provideService(Effect_namespaceObject.logWarning(LEGACY_LOAD_WARNING), Logger_namespaceObject.CurrentLoggers, new Set([
|
|
43
|
+
legacyWarningLogger
|
|
44
|
+
])));
|
|
45
|
+
}
|
|
46
|
+
function loadBackendFederatedEffectApi(options) {
|
|
39
47
|
const remoteName = options.remote?.name ?? options.remoteName;
|
|
40
|
-
if (
|
|
41
|
-
if (void 0 === options.expected)
|
|
48
|
+
if (void 0 === remoteName || 0 === remoteName.length) return Promise.reject(new Error('[BFF][Effect] Missing backend federation remote name.'));
|
|
49
|
+
if (void 0 === options.expected) warnLegacyLoad();
|
|
42
50
|
const runtime = options.runtime ?? (0, external_runtime_js_namespaceObject.createBackendFederationRuntime)(options);
|
|
43
51
|
const expose = options.expose ?? options.remote?.expose ?? universal_namespaceObject.BACKEND_FEDERATION_EFFECT_EXPOSE;
|
|
44
52
|
const remoteRequest = `${remoteName}/${(0, external_utils_js_namespaceObject.normalizeExpose)(expose)}`;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
return runtime.loadRemote(remoteRequest).then((loaded)=>{
|
|
54
|
+
if (!(0, external_utils_js_namespaceObject.isRecord)(loaded)) throw new Error(`[BFF][Effect] Backend federation expose ${remoteRequest} must load an object module.`);
|
|
55
|
+
const backendContract = loaded.backendFederationContract;
|
|
56
|
+
if (!(0, external_utils_js_namespaceObject.isRecord)(backendContract) || true !== backendContract.strictEffectApproach) throw new Error(`[BFF][Effect] Backend federation expose ${remoteRequest} must expose strict Effect metadata (strictEffectApproach: true).`);
|
|
57
|
+
if ('effect' !== backendContract.runtimeFramework) throw new Error(`[BFF][Effect] Backend federation expose ${remoteRequest} must expose strict Effect metadata (runtimeFramework: "effect").`);
|
|
58
|
+
if ('string' == typeof backendContract.name && backendContract.name !== remoteName) throw new Error(`[BFF][Effect] Backend federation expose ${remoteRequest} metadata name mismatch: expected ${remoteName}, received ${backendContract.name}.`);
|
|
59
|
+
if (!('runtime' in loaded)) throw new Error(`[BFF][Effect] Backend federation expose ${remoteRequest} must expose api and runtime.`);
|
|
60
|
+
if (void 0 !== options.expected) {
|
|
61
|
+
const issues = (0, external_identity_js_namespaceObject.validateExpectedBackendFederationIdentity)(loaded, options.expected, {
|
|
62
|
+
allowMissingIdentityMetadata: true === options.allowMissingIdentityMetadata
|
|
63
|
+
});
|
|
64
|
+
if (issues.length > 0) throw new Error(`[BFF][Effect] Backend federation expose ${remoteRequest} delivery-unit identity mismatch: ${(0, external_identity_js_namespaceObject.formatBackendFederationIdentityIssues)(issues)}.`);
|
|
65
|
+
}
|
|
66
|
+
return loaded;
|
|
67
|
+
});
|
|
59
68
|
}
|
|
60
69
|
exports.loadBackendFederatedEffectApi = __webpack_exports__.loadBackendFederatedEffectApi;
|
|
61
70
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
@@ -30,13 +30,23 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
30
30
|
function createBackendFederationLoadEntryPlugin(options) {
|
|
31
31
|
return {
|
|
32
32
|
name: 'modernjs-backend-federation-load-entry',
|
|
33
|
-
|
|
34
|
-
return options.resolveEntry({
|
|
33
|
+
loadEntry ({ remoteInfo }) {
|
|
34
|
+
return Promise.resolve(options.resolveEntry({
|
|
35
35
|
name: remoteInfo.name,
|
|
36
36
|
entry: remoteInfo.entry,
|
|
37
37
|
type: remoteInfo.type,
|
|
38
38
|
entryGlobalName: remoteInfo.entryGlobalName,
|
|
39
39
|
shareScope: remoteInfo.shareScope
|
|
40
|
+
})).then((entry)=>{
|
|
41
|
+
if (void 0 === entry) return;
|
|
42
|
+
return {
|
|
43
|
+
get (id) {
|
|
44
|
+
return ()=>Promise.resolve(entry.get(id)).then((factory)=>factory());
|
|
45
|
+
},
|
|
46
|
+
init (...args) {
|
|
47
|
+
return entry.init?.(...args);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
40
50
|
});
|
|
41
51
|
}
|
|
42
52
|
};
|
|
@@ -31,10 +31,11 @@ function collectRemotes(options) {
|
|
|
31
31
|
const remotes = [
|
|
32
32
|
...options.remotes ?? []
|
|
33
33
|
];
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
const configuredRemote = options.remote;
|
|
35
|
+
if (void 0 !== configuredRemote) {
|
|
36
|
+
const existingIndex = remotes.findIndex((remote)=>remote.name === configuredRemote.name);
|
|
37
|
+
if (existingIndex >= 0) remotes[existingIndex] = configuredRemote;
|
|
38
|
+
else remotes.push(configuredRemote);
|
|
38
39
|
}
|
|
39
40
|
return remotes;
|
|
40
41
|
}
|
|
@@ -30,30 +30,94 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
31
|
createBackendFederationRuntime: ()=>createBackendFederationRuntime
|
|
32
32
|
});
|
|
33
|
+
const runtime_namespaceObject = require("@module-federation/runtime");
|
|
33
34
|
const external_entry_js_namespaceObject = require("./entry.js");
|
|
35
|
+
const external_plugin_js_namespaceObject = require("./plugin.js");
|
|
34
36
|
const external_remotes_js_namespaceObject = require("./remotes.js");
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return `./${(0, external_utils_js_namespaceObject.normalizeExpose)(expose)}`;
|
|
37
|
+
function _check_private_redeclaration(obj, privateCollection) {
|
|
38
|
+
if (privateCollection.has(obj)) throw new TypeError("Cannot initialize the same private elements twice on an object");
|
|
38
39
|
}
|
|
40
|
+
function _class_apply_descriptor_get(receiver, descriptor) {
|
|
41
|
+
if (descriptor.get) return descriptor.get.call(receiver);
|
|
42
|
+
return descriptor.value;
|
|
43
|
+
}
|
|
44
|
+
function _class_apply_descriptor_set(receiver, descriptor, value) {
|
|
45
|
+
if (descriptor.set) descriptor.set.call(receiver, value);
|
|
46
|
+
else {
|
|
47
|
+
if (!descriptor.writable) throw new TypeError("attempted to set read only private field");
|
|
48
|
+
descriptor.value = value;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function _class_extract_field_descriptor(receiver, privateMap, action) {
|
|
52
|
+
if (!privateMap.has(receiver)) throw new TypeError("attempted to " + action + " private field on non-instance");
|
|
53
|
+
return privateMap.get(receiver);
|
|
54
|
+
}
|
|
55
|
+
function _class_private_field_get(receiver, privateMap) {
|
|
56
|
+
var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get");
|
|
57
|
+
return _class_apply_descriptor_get(receiver, descriptor);
|
|
58
|
+
}
|
|
59
|
+
function _class_private_field_init(obj, privateMap, value) {
|
|
60
|
+
_check_private_redeclaration(obj, privateMap);
|
|
61
|
+
privateMap.set(obj, value);
|
|
62
|
+
}
|
|
63
|
+
function _class_private_field_set(receiver, privateMap, value) {
|
|
64
|
+
var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
|
|
65
|
+
_class_apply_descriptor_set(receiver, descriptor, value);
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
68
|
+
let nextRuntimeId = 0;
|
|
39
69
|
function parseRemoteRequest(request) {
|
|
40
70
|
const [remoteName, ...exposeParts] = request.split('/');
|
|
41
|
-
if (
|
|
42
|
-
return
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
71
|
+
if (void 0 === remoteName || 0 === remoteName.length || 0 === exposeParts.length) return;
|
|
72
|
+
return remoteName;
|
|
73
|
+
}
|
|
74
|
+
function createLocalEntryPlugin(options, remotes) {
|
|
75
|
+
return (0, external_plugin_js_namespaceObject.createBackendFederationLoadEntryPlugin)({
|
|
76
|
+
resolveEntry (resolvedRemote) {
|
|
77
|
+
const remote = remotes.find((candidate)=>candidate.name === resolvedRemote.name);
|
|
78
|
+
if (void 0 === remote) return;
|
|
79
|
+
return {
|
|
80
|
+
get (expose) {
|
|
81
|
+
return ()=>(0, external_entry_js_namespaceObject.loadBackendFederationExpose)(remote, expose, options);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
function isolateRegisteredRemoteEntries(remotes) {
|
|
88
|
+
const runtimeId = nextRuntimeId;
|
|
89
|
+
nextRuntimeId += 1;
|
|
90
|
+
return remotes.map((remote)=>({
|
|
91
|
+
...remote,
|
|
92
|
+
entry: `${remote.entry}#modernjs-backend-runtime-${runtimeId}`
|
|
93
|
+
}));
|
|
94
|
+
}
|
|
95
|
+
var _remoteNames = /*#__PURE__*/ new WeakMap();
|
|
96
|
+
class BackendFederationRuntime extends runtime_namespaceObject.ModuleFederation {
|
|
97
|
+
loadRemote(request, loadOptions) {
|
|
98
|
+
const remoteName = parseRemoteRequest(request);
|
|
99
|
+
if (void 0 === remoteName) return Promise.reject(new Error(`[BFF][Effect] Invalid backend federation request ${request}.`));
|
|
100
|
+
if (!_class_private_field_get(this, _remoteNames).has(remoteName)) return Promise.reject(new Error(`[BFF][Effect] Missing backend federation remote ${remoteName}.`));
|
|
101
|
+
return super.loadRemote(request, loadOptions);
|
|
102
|
+
}
|
|
103
|
+
constructor(options, remotes){
|
|
104
|
+
super({
|
|
105
|
+
name: options.hostName,
|
|
106
|
+
remotes: isolateRegisteredRemoteEntries(remotes),
|
|
107
|
+
shared: {},
|
|
108
|
+
plugins: [
|
|
109
|
+
createLocalEntryPlugin(options, remotes)
|
|
110
|
+
]
|
|
111
|
+
}), _class_private_field_init(this, _remoteNames, {
|
|
112
|
+
writable: true,
|
|
113
|
+
value: void 0
|
|
114
|
+
});
|
|
115
|
+
_class_private_field_set(this, _remoteNames, new Set(remotes.map((remote)=>remote.name)));
|
|
116
|
+
}
|
|
46
117
|
}
|
|
47
118
|
function createBackendFederationRuntime(options) {
|
|
48
119
|
const remotes = (0, external_remotes_js_namespaceObject.collectRemotes)(options);
|
|
49
|
-
return
|
|
50
|
-
async loadRemote (request) {
|
|
51
|
-
const { remoteName, expose } = parseRemoteRequest(request);
|
|
52
|
-
const remote = remotes.find((candidate)=>candidate.name === remoteName);
|
|
53
|
-
if (!remote) throw new Error(`[BFF][Effect] Missing backend federation remote ${remoteName}.`);
|
|
54
|
-
return (0, external_entry_js_namespaceObject.loadBackendFederationExpose)(remote, expose, options);
|
|
55
|
-
}
|
|
56
|
-
};
|
|
120
|
+
return new BackendFederationRuntime(options, remotes);
|
|
57
121
|
}
|
|
58
122
|
exports.createBackendFederationRuntime = __webpack_exports__.createBackendFederationRuntime;
|
|
59
123
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_modules__ = {
|
|
3
|
+
"./dispatch" (module) {
|
|
4
|
+
module.exports = require("./dispatch.js");
|
|
5
|
+
},
|
|
6
|
+
"./edge-context" (module) {
|
|
7
|
+
module.exports = require("./edge-context.js");
|
|
8
|
+
},
|
|
9
|
+
"./handler" (module) {
|
|
10
|
+
module.exports = require("./handler.js");
|
|
11
|
+
},
|
|
12
|
+
"./module" (module) {
|
|
13
|
+
module.exports = require("./module.js");
|
|
14
|
+
},
|
|
15
|
+
"./operation-context" (module) {
|
|
16
|
+
module.exports = require("./operation-context.js");
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
var __webpack_module_cache__ = {};
|
|
20
|
+
function __webpack_require__(moduleId) {
|
|
21
|
+
var cachedModule = __webpack_module_cache__[moduleId];
|
|
22
|
+
if (void 0 !== cachedModule) return cachedModule.exports;
|
|
23
|
+
var module = __webpack_module_cache__[moduleId] = {
|
|
24
|
+
exports: {}
|
|
25
|
+
};
|
|
26
|
+
__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
27
|
+
return module.exports;
|
|
28
|
+
}
|
|
29
|
+
(()=>{
|
|
30
|
+
__webpack_require__.n = (module)=>{
|
|
31
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
32
|
+
__webpack_require__.d(getter, {
|
|
33
|
+
a: getter
|
|
34
|
+
});
|
|
35
|
+
return getter;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
(()=>{
|
|
39
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
40
|
+
var define = (defs, kind)=>{
|
|
41
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
42
|
+
enumerable: true,
|
|
43
|
+
[kind]: defs[key]
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
define(getters, "get");
|
|
47
|
+
define(values, "value");
|
|
48
|
+
};
|
|
49
|
+
})();
|
|
50
|
+
(()=>{
|
|
51
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
52
|
+
})();
|
|
53
|
+
(()=>{
|
|
54
|
+
__webpack_require__.r = (exports1)=>{
|
|
55
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
56
|
+
value: 'Module'
|
|
57
|
+
});
|
|
58
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
59
|
+
value: true
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
})();
|
|
63
|
+
var __webpack_exports__ = {};
|
|
64
|
+
(()=>{
|
|
65
|
+
__webpack_require__.r(__webpack_exports__);
|
|
66
|
+
var _dispatch__rspack_import_0 = __webpack_require__("./dispatch");
|
|
67
|
+
var _edge_context__rspack_import_1 = __webpack_require__("./edge-context");
|
|
68
|
+
var _module__rspack_import_2 = __webpack_require__("./module");
|
|
69
|
+
var _handler__rspack_import_3 = __webpack_require__("./handler");
|
|
70
|
+
var __rspack_reexport = {};
|
|
71
|
+
for(const __rspack_import_key in _handler__rspack_import_3)if ([
|
|
72
|
+
"runWithEffectContext",
|
|
73
|
+
"useEffectContext",
|
|
74
|
+
"default",
|
|
75
|
+
"useOperationContext",
|
|
76
|
+
"createEffectOperationContext",
|
|
77
|
+
"dispatchEffectBffRequest",
|
|
78
|
+
"createEffectBffTestHandler",
|
|
79
|
+
"createEffectBffEdgeHandler",
|
|
80
|
+
"createEffectBffEdgeDispatcher"
|
|
81
|
+
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_handler__rspack_import_3[__rspack_import_key];
|
|
82
|
+
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
83
|
+
var _operation_context__rspack_import_4 = __webpack_require__("./operation-context");
|
|
84
|
+
async function dispatchEffectBffRequest(handler, request, options = {}) {
|
|
85
|
+
return (0, _dispatch__rspack_import_0.dispatchEffectBffRequestWithContext)(handler, request, {
|
|
86
|
+
...options,
|
|
87
|
+
runWithEffectContext: _edge_context__rspack_import_1.runWithEffectContext
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
async function createEffectBffEdgeDispatcher(options) {
|
|
91
|
+
const loaded = await (0, _module__rspack_import_2.resolveEffectBffModuleHandler)(options.module, {
|
|
92
|
+
openapi: options.openapi,
|
|
93
|
+
dataPlatform: options.dataPlatform,
|
|
94
|
+
onWarning: options.onWarning
|
|
95
|
+
});
|
|
96
|
+
if (!loaded) throw new Error('[BFF][Effect] Invalid Effect edge module. Export defineEffectBff(...) or a { api, layer } HttpApi module.');
|
|
97
|
+
return {
|
|
98
|
+
dispatch: (request, dispatchOptions = {})=>dispatchEffectBffRequest(loaded.handler, request, {
|
|
99
|
+
...dispatchOptions,
|
|
100
|
+
prefix: options.prefix,
|
|
101
|
+
onError: options.onError
|
|
102
|
+
}),
|
|
103
|
+
dispose: async ()=>{
|
|
104
|
+
await loaded.dispose?.();
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
const createEffectBffTestHandler = createEffectBffEdgeHandler;
|
|
109
|
+
async function createEffectBffEdgeHandler(options) {
|
|
110
|
+
const dispatcher = await createEffectBffEdgeDispatcher(options);
|
|
111
|
+
return {
|
|
112
|
+
handler: dispatcher.dispatch,
|
|
113
|
+
dispose: dispatcher.dispose
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
117
|
+
createEffectBffEdgeDispatcher: ()=>createEffectBffEdgeDispatcher,
|
|
118
|
+
createEffectBffEdgeHandler: ()=>createEffectBffEdgeHandler,
|
|
119
|
+
createEffectOperationContext: ()=>_operation_context__rspack_import_4.createEffectOperationContext,
|
|
120
|
+
dispatchEffectBffRequest: ()=>dispatchEffectBffRequest,
|
|
121
|
+
runWithEffectContext: ()=>_edge_context__rspack_import_1.runWithEffectContext,
|
|
122
|
+
useEffectContext: ()=>_edge_context__rspack_import_1.useEffectContext,
|
|
123
|
+
useOperationContext: ()=>_edge_context__rspack_import_1.useOperationContext
|
|
124
|
+
}, {
|
|
125
|
+
createEffectBffTestHandler: createEffectBffTestHandler
|
|
126
|
+
});
|
|
127
|
+
})();
|
|
128
|
+
exports.createEffectBffEdgeDispatcher = __webpack_exports__.createEffectBffEdgeDispatcher;
|
|
129
|
+
exports.createEffectBffEdgeHandler = __webpack_exports__.createEffectBffEdgeHandler;
|
|
130
|
+
exports.createEffectBffTestHandler = __webpack_exports__.createEffectBffTestHandler;
|
|
131
|
+
exports.createEffectOperationContext = __webpack_exports__.createEffectOperationContext;
|
|
132
|
+
exports.dispatchEffectBffRequest = __webpack_exports__.dispatchEffectBffRequest;
|
|
133
|
+
exports.runWithEffectContext = __webpack_exports__.runWithEffectContext;
|
|
134
|
+
exports.useEffectContext = __webpack_exports__.useEffectContext;
|
|
135
|
+
exports.useOperationContext = __webpack_exports__.useOperationContext;
|
|
136
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
137
|
+
"createEffectBffEdgeDispatcher",
|
|
138
|
+
"createEffectBffEdgeHandler",
|
|
139
|
+
"createEffectBffTestHandler",
|
|
140
|
+
"createEffectOperationContext",
|
|
141
|
+
"dispatchEffectBffRequest",
|
|
142
|
+
"runWithEffectContext",
|
|
143
|
+
"useEffectContext",
|
|
144
|
+
"useOperationContext"
|
|
145
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
146
|
+
Object.defineProperty(exports, '__esModule', {
|
|
147
|
+
value: true
|
|
148
|
+
});
|
|
@@ -3,20 +3,8 @@ var __webpack_modules__ = {
|
|
|
3
3
|
"./backend-federation" (module) {
|
|
4
4
|
module.exports = require("./backend-federation.js");
|
|
5
5
|
},
|
|
6
|
-
"./
|
|
7
|
-
module.exports = require("./
|
|
8
|
-
},
|
|
9
|
-
"./edge-context" (module) {
|
|
10
|
-
module.exports = require("./edge-context.js");
|
|
11
|
-
},
|
|
12
|
-
"./handler" (module) {
|
|
13
|
-
module.exports = require("./handler.js");
|
|
14
|
-
},
|
|
15
|
-
"./module" (module) {
|
|
16
|
-
module.exports = require("./module.js");
|
|
17
|
-
},
|
|
18
|
-
"./operation-context" (module) {
|
|
19
|
-
module.exports = require("./operation-context.js");
|
|
6
|
+
"./edge-dispatcher" (module) {
|
|
7
|
+
module.exports = require("./edge-dispatcher.js");
|
|
20
8
|
}
|
|
21
9
|
};
|
|
22
10
|
var __webpack_module_cache__ = {};
|
|
@@ -66,83 +54,30 @@ function __webpack_require__(moduleId) {
|
|
|
66
54
|
var __webpack_exports__ = {};
|
|
67
55
|
(()=>{
|
|
68
56
|
__webpack_require__.r(__webpack_exports__);
|
|
69
|
-
var
|
|
70
|
-
var
|
|
71
|
-
var _module__rspack_import_2 = __webpack_require__("./module");
|
|
72
|
-
var _backend_federation__rspack_import_3 = __webpack_require__("./backend-federation");
|
|
73
|
-
var _handler__rspack_import_4 = __webpack_require__("./handler");
|
|
57
|
+
var _backend_federation__rspack_import_0 = __webpack_require__("./backend-federation");
|
|
58
|
+
var _edge_dispatcher__rspack_import_1 = __webpack_require__("./edge-dispatcher");
|
|
74
59
|
var __rspack_reexport = {};
|
|
75
|
-
for(const __rspack_import_key in
|
|
60
|
+
for(const __rspack_import_key in _edge_dispatcher__rspack_import_1)if ([
|
|
76
61
|
"validateExpectedBackendFederationIdentity",
|
|
77
|
-
"createBackendFederationLoadEntryPlugin",
|
|
78
|
-
"useOperationContext",
|
|
79
|
-
"BACKEND_FEDERATION_MANIFEST_FILE",
|
|
80
|
-
"createEffectOperationContext",
|
|
81
|
-
"loadBackendFederatedEffectApi",
|
|
82
|
-
"BACKEND_FEDERATION_CONTRACT_VERSION",
|
|
83
|
-
"createEffectBffEdgeHandler",
|
|
84
|
-
"runWithEffectContext",
|
|
85
62
|
"BACKEND_FEDERATION_EFFECT_EXPOSE",
|
|
86
|
-
"useEffectContext",
|
|
87
|
-
"dispatchEffectBffRequest",
|
|
88
63
|
"default",
|
|
64
|
+
"createBackendFederationLoadEntryPlugin",
|
|
65
|
+
"BACKEND_FEDERATION_MANIFEST_FILE",
|
|
89
66
|
"BACKEND_FEDERATION_NODE_ADAPTER_VERSION",
|
|
90
|
-
"
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>
|
|
67
|
+
"BACKEND_FEDERATION_CONTRACT_VERSION",
|
|
68
|
+
"loadBackendFederatedEffectApi",
|
|
69
|
+
"createBackendFederationRuntime"
|
|
70
|
+
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_edge_dispatcher__rspack_import_1[__rspack_import_key];
|
|
94
71
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
95
|
-
var _operation_context__rspack_import_5 = __webpack_require__("./operation-context");
|
|
96
|
-
async function dispatchEffectBffRequest(handler, request, options = {}) {
|
|
97
|
-
return (0, _dispatch__rspack_import_0.dispatchEffectBffRequestWithContext)(handler, request, {
|
|
98
|
-
...options,
|
|
99
|
-
runWithEffectContext: _edge_context__rspack_import_1.runWithEffectContext
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
async function createEffectBffEdgeDispatcher(options) {
|
|
103
|
-
const loaded = await (0, _module__rspack_import_2.resolveEffectBffModuleHandler)(options.module, {
|
|
104
|
-
openapi: options.openapi,
|
|
105
|
-
dataPlatform: options.dataPlatform,
|
|
106
|
-
onWarning: options.onWarning
|
|
107
|
-
});
|
|
108
|
-
if (!loaded) throw new Error('[BFF][Effect] Invalid Effect edge module. Export defineEffectBff(...) or a { api, layer } HttpApi module.');
|
|
109
|
-
return {
|
|
110
|
-
dispatch: (request, dispatchOptions = {})=>dispatchEffectBffRequest(loaded.handler, request, {
|
|
111
|
-
...dispatchOptions,
|
|
112
|
-
prefix: options.prefix,
|
|
113
|
-
onError: options.onError
|
|
114
|
-
}),
|
|
115
|
-
dispose: async ()=>{
|
|
116
|
-
await loaded.dispose?.();
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
const createEffectBffTestHandler = createEffectBffEdgeHandler;
|
|
121
|
-
async function createEffectBffEdgeHandler(options) {
|
|
122
|
-
const dispatcher = await createEffectBffEdgeDispatcher(options);
|
|
123
|
-
return {
|
|
124
|
-
handler: dispatcher.dispatch,
|
|
125
|
-
dispose: dispatcher.dispose
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
72
|
__webpack_require__.d(__webpack_exports__, {
|
|
129
|
-
BACKEND_FEDERATION_CONTRACT_VERSION: ()=>
|
|
130
|
-
BACKEND_FEDERATION_EFFECT_EXPOSE: ()=>
|
|
131
|
-
BACKEND_FEDERATION_MANIFEST_FILE: ()=>
|
|
132
|
-
BACKEND_FEDERATION_NODE_ADAPTER_VERSION: ()=>
|
|
133
|
-
createBackendFederationLoadEntryPlugin: ()=>
|
|
134
|
-
createBackendFederationRuntime: ()=>
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
createEffectOperationContext: ()=>_operation_context__rspack_import_5.createEffectOperationContext,
|
|
138
|
-
dispatchEffectBffRequest: ()=>dispatchEffectBffRequest,
|
|
139
|
-
loadBackendFederatedEffectApi: ()=>_backend_federation__rspack_import_3.loadBackendFederatedEffectApi,
|
|
140
|
-
runWithEffectContext: ()=>_edge_context__rspack_import_1.runWithEffectContext,
|
|
141
|
-
useEffectContext: ()=>_edge_context__rspack_import_1.useEffectContext,
|
|
142
|
-
useOperationContext: ()=>_edge_context__rspack_import_1.useOperationContext,
|
|
143
|
-
validateExpectedBackendFederationIdentity: ()=>_backend_federation__rspack_import_3.validateExpectedBackendFederationIdentity
|
|
144
|
-
}, {
|
|
145
|
-
createEffectBffTestHandler: createEffectBffTestHandler
|
|
73
|
+
BACKEND_FEDERATION_CONTRACT_VERSION: ()=>_backend_federation__rspack_import_0.BACKEND_FEDERATION_CONTRACT_VERSION,
|
|
74
|
+
BACKEND_FEDERATION_EFFECT_EXPOSE: ()=>_backend_federation__rspack_import_0.BACKEND_FEDERATION_EFFECT_EXPOSE,
|
|
75
|
+
BACKEND_FEDERATION_MANIFEST_FILE: ()=>_backend_federation__rspack_import_0.BACKEND_FEDERATION_MANIFEST_FILE,
|
|
76
|
+
BACKEND_FEDERATION_NODE_ADAPTER_VERSION: ()=>_backend_federation__rspack_import_0.BACKEND_FEDERATION_NODE_ADAPTER_VERSION,
|
|
77
|
+
createBackendFederationLoadEntryPlugin: ()=>_backend_federation__rspack_import_0.createBackendFederationLoadEntryPlugin,
|
|
78
|
+
createBackendFederationRuntime: ()=>_backend_federation__rspack_import_0.createBackendFederationRuntime,
|
|
79
|
+
loadBackendFederatedEffectApi: ()=>_backend_federation__rspack_import_0.loadBackendFederatedEffectApi,
|
|
80
|
+
validateExpectedBackendFederationIdentity: ()=>_backend_federation__rspack_import_0.validateExpectedBackendFederationIdentity
|
|
146
81
|
});
|
|
147
82
|
})();
|
|
148
83
|
exports.BACKEND_FEDERATION_CONTRACT_VERSION = __webpack_exports__.BACKEND_FEDERATION_CONTRACT_VERSION;
|
|
@@ -151,15 +86,7 @@ exports.BACKEND_FEDERATION_MANIFEST_FILE = __webpack_exports__.BACKEND_FEDERATIO
|
|
|
151
86
|
exports.BACKEND_FEDERATION_NODE_ADAPTER_VERSION = __webpack_exports__.BACKEND_FEDERATION_NODE_ADAPTER_VERSION;
|
|
152
87
|
exports.createBackendFederationLoadEntryPlugin = __webpack_exports__.createBackendFederationLoadEntryPlugin;
|
|
153
88
|
exports.createBackendFederationRuntime = __webpack_exports__.createBackendFederationRuntime;
|
|
154
|
-
exports.createEffectBffEdgeDispatcher = __webpack_exports__.createEffectBffEdgeDispatcher;
|
|
155
|
-
exports.createEffectBffEdgeHandler = __webpack_exports__.createEffectBffEdgeHandler;
|
|
156
|
-
exports.createEffectBffTestHandler = __webpack_exports__.createEffectBffTestHandler;
|
|
157
|
-
exports.createEffectOperationContext = __webpack_exports__.createEffectOperationContext;
|
|
158
|
-
exports.dispatchEffectBffRequest = __webpack_exports__.dispatchEffectBffRequest;
|
|
159
89
|
exports.loadBackendFederatedEffectApi = __webpack_exports__.loadBackendFederatedEffectApi;
|
|
160
|
-
exports.runWithEffectContext = __webpack_exports__.runWithEffectContext;
|
|
161
|
-
exports.useEffectContext = __webpack_exports__.useEffectContext;
|
|
162
|
-
exports.useOperationContext = __webpack_exports__.useOperationContext;
|
|
163
90
|
exports.validateExpectedBackendFederationIdentity = __webpack_exports__.validateExpectedBackendFederationIdentity;
|
|
164
91
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
165
92
|
"BACKEND_FEDERATION_CONTRACT_VERSION",
|
|
@@ -168,15 +95,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
|
168
95
|
"BACKEND_FEDERATION_NODE_ADAPTER_VERSION",
|
|
169
96
|
"createBackendFederationLoadEntryPlugin",
|
|
170
97
|
"createBackendFederationRuntime",
|
|
171
|
-
"createEffectBffEdgeDispatcher",
|
|
172
|
-
"createEffectBffEdgeHandler",
|
|
173
|
-
"createEffectBffTestHandler",
|
|
174
|
-
"createEffectOperationContext",
|
|
175
|
-
"dispatchEffectBffRequest",
|
|
176
98
|
"loadBackendFederatedEffectApi",
|
|
177
|
-
"runWithEffectContext",
|
|
178
|
-
"useEffectContext",
|
|
179
|
-
"useOperationContext",
|
|
180
99
|
"validateExpectedBackendFederationIdentity"
|
|
181
100
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
182
101
|
Object.defineProperty(exports, '__esModule', {
|
|
@@ -49,6 +49,7 @@ function defineEffectBff(definition) {
|
|
|
49
49
|
openapi: options?.openapi,
|
|
50
50
|
rpc: mergedRpcOptions,
|
|
51
51
|
dataPlatform: (0, external_envelope_js_namespaceObject.mergeDataPlatformOptions)(definition.dataPlatform, options?.dataPlatform),
|
|
52
|
+
interceptRequest: definition.interceptRequest,
|
|
52
53
|
validateRequest: options?.validateRequest
|
|
53
54
|
});
|
|
54
55
|
};
|
|
@@ -44,23 +44,30 @@ function createHttpApiHandler(options) {
|
|
|
44
44
|
const openApiLayer = (0, external_openapi_js_namespaceObject.createOpenApiLayer)(options.api, options.openapi);
|
|
45
45
|
const mergedLayer = openApiLayer ? Layer_namespaceObject.mergeAll(apiLayer, openApiLayer) : apiLayer;
|
|
46
46
|
const httpApiHandler = http_namespaceObject.HttpRouter.toWebHandler(mergedLayer);
|
|
47
|
-
const
|
|
48
|
-
const policyDenial = options.validateRequest?.(request);
|
|
49
|
-
if (policyDenial) return policyDenial;
|
|
47
|
+
const dispatchHttpApiRequest = async (request, context)=>{
|
|
50
48
|
const preparedRequest = await (0, external_batch_js_namespaceObject.prepareJsonRequestBody)(request);
|
|
51
49
|
if (preparedRequest instanceof Response) return preparedRequest;
|
|
52
50
|
const validationError = (0, external_envelope_js_namespaceObject.validateDataPlatformRequestEnvelope)(preparedRequest, options.dataPlatform);
|
|
53
51
|
if (validationError) return validationError;
|
|
54
52
|
return httpApiHandler.handler(preparedRequest, (0, external_types_js_namespaceObject.toEffectServiceContext)(context));
|
|
55
53
|
};
|
|
54
|
+
const withRequestPolicy = async (request, context)=>{
|
|
55
|
+
const policyDenial = options.validateRequest?.(request);
|
|
56
|
+
if (policyDenial) return policyDenial;
|
|
57
|
+
const next = ()=>dispatchHttpApiRequest(request, context);
|
|
58
|
+
return options.interceptRequest ? options.interceptRequest({
|
|
59
|
+
request,
|
|
60
|
+
next
|
|
61
|
+
}) : next();
|
|
62
|
+
};
|
|
56
63
|
const batchHandler = (0, external_batch_handler_js_namespaceObject.createDataPlatformBatchRequestHandler)({
|
|
57
64
|
dataPlatform: options.dataPlatform,
|
|
58
|
-
handleItem:
|
|
65
|
+
handleItem: withRequestPolicy
|
|
59
66
|
});
|
|
60
67
|
const handleHttpApiRequest = async (request, context)=>{
|
|
61
68
|
const pathname = (0, external_routing_js_namespaceObject.getRequestPathname)(request);
|
|
62
69
|
if (batchHandler.enabled && pathname === batchHandler.path) return batchHandler.handle(request, context);
|
|
63
|
-
return
|
|
70
|
+
return withRequestPolicy(request, context);
|
|
64
71
|
};
|
|
65
72
|
if (!options.rpc) return {
|
|
66
73
|
handler: handleHttpApiRequest,
|
|
@@ -75,7 +82,11 @@ function createHttpApiHandler(options) {
|
|
|
75
82
|
if ((0, external_routing_js_namespaceObject.isRpcRequest)(request, rpcPath)) {
|
|
76
83
|
const policyDenial = options.validateRequest?.(request);
|
|
77
84
|
if (policyDenial) return policyDenial;
|
|
78
|
-
|
|
85
|
+
const next = ()=>rpcHandler.handler(request, (0, external_types_js_namespaceObject.toEffectServiceContext)(context));
|
|
86
|
+
return options.interceptRequest ? options.interceptRequest({
|
|
87
|
+
request,
|
|
88
|
+
next
|
|
89
|
+
}) : next();
|
|
79
90
|
}
|
|
80
91
|
return handleHttpApiRequest(request, context);
|
|
81
92
|
},
|