@bleedingdev/modern-js-plugin-bff-extensions 3.8.3-ultramodern.2
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/LICENSE +22 -0
- package/README.md +29 -0
- package/dist/cjs/backend-federation/edge-runtime.js +230 -0
- package/dist/cjs/backend-federation/edge.js +80 -0
- package/dist/cjs/backend-federation/entry.js +94 -0
- package/dist/cjs/backend-federation/identity.js +82 -0
- package/dist/cjs/backend-federation/index.js +61 -0
- package/dist/cjs/backend-federation/legacy-warning.js +40 -0
- package/dist/cjs/backend-federation/load.js +72 -0
- package/dist/cjs/backend-federation/node.js +50 -0
- package/dist/cjs/backend-federation/plugin.js +63 -0
- package/dist/cjs/backend-federation/remotes.js +51 -0
- package/dist/cjs/backend-federation/runtime.js +128 -0
- package/dist/cjs/backend-federation/types.js +18 -0
- package/dist/cjs/backend-federation/utils.js +48 -0
- package/dist/cjs/backend-federation/validate-loaded.js +56 -0
- package/dist/cjs/backend-federation-manifest/errors.js +83 -0
- package/dist/cjs/backend-federation-manifest/index.js +48 -0
- package/dist/cjs/backend-federation-manifest/load.js +173 -0
- package/dist/cjs/backend-federation-manifest/metadata.js +101 -0
- package/dist/cjs/backend-federation-manifest/node.js +50 -0
- package/dist/cjs/backend-federation-manifest/reference.js +132 -0
- package/dist/cjs/backend-federation-manifest/remote.js +81 -0
- package/dist/cjs/backend-federation-manifest/types.js +18 -0
- package/dist/cjs/backend-federation-manifest/validation.js +110 -0
- package/dist/cjs/client-generator/built-entry.js +84 -0
- package/dist/cjs/client-generator/generator.js +73 -0
- package/dist/cjs/client-generator/index.js +54 -0
- package/dist/cjs/client-generator/paths.js +62 -0
- package/dist/cjs/client-generator/rendering.js +253 -0
- package/dist/cjs/client-generator/runtime.js +68 -0
- package/dist/cjs/client-generator/types.js +18 -0
- package/dist/cjs/cross-project-generation/index.js +40 -0
- package/dist/cjs/cross-project-generation/render.js +53 -0
- package/dist/cjs/cross-project-policy/evaluation.js +75 -0
- package/dist/cjs/cross-project-policy/index.js +40 -0
- package/dist/cjs/cross-project-policy/node.js +76 -0
- package/dist/cjs/effect-adapter/cross-project-policy.js +64 -0
- package/dist/cjs/effect-adapter/entry.js +98 -0
- package/dist/cjs/effect-adapter/error-response.js +75 -0
- package/dist/cjs/effect-adapter/index.js +187 -0
- package/dist/cjs/effect-source-loader/index.js +51 -0
- package/dist/cjs/effect-source-loader/loader.js +341 -0
- package/dist/cjs/effect-source-loader/worker-runtime-wrapper.js +97 -0
- package/dist/cjs/hono/bind-route-handlers.js +76 -0
- package/dist/cjs/hono/cross-project-policy.js +48 -0
- package/dist/cjs/hono/index.js +40 -0
- package/dist/esm/backend-federation/edge-runtime.mjs +186 -0
- package/dist/esm/backend-federation/edge.mjs +21 -0
- package/dist/esm/backend-federation/entry.mjs +56 -0
- package/dist/esm/backend-federation/identity.mjs +41 -0
- package/dist/esm/backend-federation/index.mjs +4 -0
- package/dist/esm/backend-federation/legacy-warning.mjs +2 -0
- package/dist/esm/backend-federation/load.mjs +34 -0
- package/dist/esm/backend-federation/node.mjs +12 -0
- package/dist/esm/backend-federation/plugin.mjs +25 -0
- package/dist/esm/backend-federation/remotes.mjs +13 -0
- package/dist/esm/backend-federation/runtime.mjs +90 -0
- package/dist/esm/backend-federation/types.mjs +0 -0
- package/dist/esm/backend-federation/utils.mjs +7 -0
- package/dist/esm/backend-federation/validate-loaded.mjs +18 -0
- package/dist/esm/backend-federation-manifest/errors.mjs +32 -0
- package/dist/esm/backend-federation-manifest/index.mjs +3 -0
- package/dist/esm/backend-federation-manifest/load.mjs +135 -0
- package/dist/esm/backend-federation-manifest/metadata.mjs +42 -0
- package/dist/esm/backend-federation-manifest/node.mjs +12 -0
- package/dist/esm/backend-federation-manifest/reference.mjs +88 -0
- package/dist/esm/backend-federation-manifest/remote.mjs +43 -0
- package/dist/esm/backend-federation-manifest/types.mjs +0 -0
- package/dist/esm/backend-federation-manifest/validation.mjs +66 -0
- package/dist/esm/client-generator/built-entry.mjs +40 -0
- package/dist/esm/client-generator/generator.mjs +32 -0
- package/dist/esm/client-generator/index.mjs +3 -0
- package/dist/esm/client-generator/paths.mjs +24 -0
- package/dist/esm/client-generator/rendering.mjs +209 -0
- package/dist/esm/client-generator/runtime.mjs +27 -0
- package/dist/esm/client-generator/types.mjs +0 -0
- package/dist/esm/cross-project-generation/index.mjs +1 -0
- package/dist/esm/cross-project-generation/render.mjs +15 -0
- package/dist/esm/cross-project-policy/evaluation.mjs +34 -0
- package/dist/esm/cross-project-policy/index.mjs +1 -0
- package/dist/esm/cross-project-policy/node.mjs +28 -0
- package/dist/esm/effect-adapter/cross-project-policy.mjs +26 -0
- package/dist/esm/effect-adapter/entry.mjs +50 -0
- package/dist/esm/effect-adapter/error-response.mjs +37 -0
- package/dist/esm/effect-adapter/index.mjs +139 -0
- package/dist/esm/effect-source-loader/index.mjs +3 -0
- package/dist/esm/effect-source-loader/loader.mjs +285 -0
- package/dist/esm/effect-source-loader/worker-runtime-wrapper.mjs +56 -0
- package/dist/esm/hono/bind-route-handlers.mjs +38 -0
- package/dist/esm/hono/cross-project-policy.mjs +10 -0
- package/dist/esm/hono/index.mjs +1 -0
- package/dist/esm-node/backend-federation/edge-runtime.mjs +187 -0
- package/dist/esm-node/backend-federation/edge.mjs +22 -0
- package/dist/esm-node/backend-federation/entry.mjs +57 -0
- package/dist/esm-node/backend-federation/identity.mjs +42 -0
- package/dist/esm-node/backend-federation/index.mjs +5 -0
- package/dist/esm-node/backend-federation/legacy-warning.mjs +3 -0
- package/dist/esm-node/backend-federation/load.mjs +35 -0
- package/dist/esm-node/backend-federation/node.mjs +13 -0
- package/dist/esm-node/backend-federation/plugin.mjs +26 -0
- package/dist/esm-node/backend-federation/remotes.mjs +14 -0
- package/dist/esm-node/backend-federation/runtime.mjs +91 -0
- package/dist/esm-node/backend-federation/types.mjs +1 -0
- package/dist/esm-node/backend-federation/utils.mjs +8 -0
- package/dist/esm-node/backend-federation/validate-loaded.mjs +19 -0
- package/dist/esm-node/backend-federation-manifest/errors.mjs +33 -0
- package/dist/esm-node/backend-federation-manifest/index.mjs +4 -0
- package/dist/esm-node/backend-federation-manifest/load.mjs +136 -0
- package/dist/esm-node/backend-federation-manifest/metadata.mjs +43 -0
- package/dist/esm-node/backend-federation-manifest/node.mjs +13 -0
- package/dist/esm-node/backend-federation-manifest/reference.mjs +89 -0
- package/dist/esm-node/backend-federation-manifest/remote.mjs +44 -0
- package/dist/esm-node/backend-federation-manifest/types.mjs +1 -0
- package/dist/esm-node/backend-federation-manifest/validation.mjs +67 -0
- package/dist/esm-node/client-generator/built-entry.mjs +41 -0
- package/dist/esm-node/client-generator/generator.mjs +33 -0
- package/dist/esm-node/client-generator/index.mjs +4 -0
- package/dist/esm-node/client-generator/paths.mjs +25 -0
- package/dist/esm-node/client-generator/rendering.mjs +210 -0
- package/dist/esm-node/client-generator/runtime.mjs +29 -0
- package/dist/esm-node/client-generator/types.mjs +1 -0
- package/dist/esm-node/cross-project-generation/index.mjs +2 -0
- package/dist/esm-node/cross-project-generation/render.mjs +16 -0
- package/dist/esm-node/cross-project-policy/evaluation.mjs +35 -0
- package/dist/esm-node/cross-project-policy/index.mjs +2 -0
- package/dist/esm-node/cross-project-policy/node.mjs +29 -0
- package/dist/esm-node/effect-adapter/cross-project-policy.mjs +27 -0
- package/dist/esm-node/effect-adapter/entry.mjs +51 -0
- package/dist/esm-node/effect-adapter/error-response.mjs +38 -0
- package/dist/esm-node/effect-adapter/index.mjs +140 -0
- package/dist/esm-node/effect-source-loader/index.mjs +4 -0
- package/dist/esm-node/effect-source-loader/loader.mjs +286 -0
- package/dist/esm-node/effect-source-loader/worker-runtime-wrapper.mjs +57 -0
- package/dist/esm-node/hono/bind-route-handlers.mjs +39 -0
- package/dist/esm-node/hono/cross-project-policy.mjs +11 -0
- package/dist/esm-node/hono/index.mjs +2 -0
- package/dist/types/backend-federation/edge-runtime.d.ts +46 -0
- package/dist/types/backend-federation/edge.d.ts +28 -0
- package/dist/types/backend-federation/entry.d.ts +2 -0
- package/dist/types/backend-federation/identity.d.ts +30 -0
- package/dist/types/backend-federation/index.d.ts +6 -0
- package/dist/types/backend-federation/legacy-warning.d.ts +1 -0
- package/dist/types/backend-federation/load.d.ts +13 -0
- package/dist/types/backend-federation/node.d.ts +4 -0
- package/dist/types/backend-federation/plugin.d.ts +3 -0
- package/dist/types/backend-federation/remotes.d.ts +2 -0
- package/dist/types/backend-federation/runtime.d.ts +3 -0
- package/dist/types/backend-federation/types.d.ts +76 -0
- package/dist/types/backend-federation/utils.d.ts +2 -0
- package/dist/types/backend-federation/validate-loaded.d.ts +8 -0
- package/dist/types/backend-federation-manifest/errors.d.ts +11 -0
- package/dist/types/backend-federation-manifest/index.d.ts +5 -0
- package/dist/types/backend-federation-manifest/load.d.ts +3 -0
- package/dist/types/backend-federation-manifest/metadata.d.ts +18 -0
- package/dist/types/backend-federation-manifest/node.d.ts +3 -0
- package/dist/types/backend-federation-manifest/reference.d.ts +4 -0
- package/dist/types/backend-federation-manifest/remote.d.ts +3 -0
- package/dist/types/backend-federation-manifest/types.d.ts +49 -0
- package/dist/types/backend-federation-manifest/validation.d.ts +5 -0
- package/dist/types/client-generator/built-entry.d.ts +16 -0
- package/dist/types/client-generator/generator.d.ts +3 -0
- package/dist/types/client-generator/index.d.ts +4 -0
- package/dist/types/client-generator/paths.d.ts +5 -0
- package/dist/types/client-generator/rendering.d.ts +24 -0
- package/dist/types/client-generator/runtime.d.ts +12 -0
- package/dist/types/client-generator/types.d.ts +33 -0
- package/dist/types/cross-project-generation/index.d.ts +1 -0
- package/dist/types/cross-project-generation/render.d.ts +1 -0
- package/dist/types/cross-project-policy/evaluation.d.ts +4 -0
- package/dist/types/cross-project-policy/index.d.ts +1 -0
- package/dist/types/cross-project-policy/node.d.ts +4 -0
- package/dist/types/effect-adapter/cross-project-policy.d.ts +4 -0
- package/dist/types/effect-adapter/entry.d.ts +2 -0
- package/dist/types/effect-adapter/error-response.d.ts +2 -0
- package/dist/types/effect-adapter/index.d.ts +19 -0
- package/dist/types/effect-source-loader/index.d.ts +3 -0
- package/dist/types/effect-source-loader/loader.d.ts +17 -0
- package/dist/types/effect-source-loader/worker-runtime-wrapper.d.ts +25 -0
- package/dist/types/hono/bind-route-handlers.d.ts +10 -0
- package/dist/types/hono/cross-project-policy.d.ts +3 -0
- package/dist/types/hono/index.d.ts +1 -0
- package/package.json +213 -0
- package/src/backend-federation/edge-runtime.ts +258 -0
- package/src/backend-federation/edge.ts +128 -0
- package/src/backend-federation/entry.ts +125 -0
- package/src/backend-federation/identity.ts +97 -0
- package/src/backend-federation/index.ts +30 -0
- package/src/backend-federation/legacy-warning.ts +2 -0
- package/src/backend-federation/load.ts +102 -0
- package/src/backend-federation/node.ts +33 -0
- package/src/backend-federation/plugin.ts +35 -0
- package/src/backend-federation/remotes.ts +17 -0
- package/src/backend-federation/runtime.ts +99 -0
- package/src/backend-federation/types.ts +103 -0
- package/src/backend-federation/utils.ts +7 -0
- package/src/backend-federation/validate-loaded.ts +72 -0
- package/src/backend-federation-manifest/errors.ts +85 -0
- package/src/backend-federation-manifest/index.ts +11 -0
- package/src/backend-federation-manifest/load.ts +266 -0
- package/src/backend-federation-manifest/metadata.ts +73 -0
- package/src/backend-federation-manifest/node.ts +19 -0
- package/src/backend-federation-manifest/reference.ts +240 -0
- package/src/backend-federation-manifest/remote.ts +102 -0
- package/src/backend-federation-manifest/types.ts +73 -0
- package/src/backend-federation-manifest/validation.ts +255 -0
- package/src/client-generator/built-entry.ts +70 -0
- package/src/client-generator/generator.ts +52 -0
- package/src/client-generator/index.ts +10 -0
- package/src/client-generator/paths.ts +40 -0
- package/src/client-generator/rendering.ts +307 -0
- package/src/client-generator/runtime.ts +69 -0
- package/src/client-generator/types.ts +35 -0
- package/src/cross-project-generation/index.ts +1 -0
- package/src/cross-project-generation/render.ts +14 -0
- package/src/cross-project-policy/evaluation.ts +70 -0
- package/src/cross-project-policy/index.ts +1 -0
- package/src/cross-project-policy/node.ts +63 -0
- package/src/effect-adapter/cross-project-policy.ts +63 -0
- package/src/effect-adapter/entry.ts +95 -0
- package/src/effect-adapter/error-response.ts +68 -0
- package/src/effect-adapter/index.ts +246 -0
- package/src/effect-source-loader/index.ts +6 -0
- package/src/effect-source-loader/loader.ts +397 -0
- package/src/effect-source-loader/worker-runtime-wrapper.ts +90 -0
- package/src/hono/bind-route-handlers.ts +62 -0
- package/src/hono/cross-project-policy.ts +26 -0
- package/src/hono/index.ts +4 -0
package/package.json
ADDED
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@bleedingdev/modern-js-plugin-bff-extensions",
|
|
3
|
+
"description": "Fork-owned UltraModern.js BFF adapters, generation, policy, and backend federation extensions.",
|
|
4
|
+
"homepage": "https://github.com/BleedingDev/ultramodern.js#readme",
|
|
5
|
+
"bugs": {
|
|
6
|
+
"url": "https://github.com/BleedingDev/ultramodern.js/issues"
|
|
7
|
+
},
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/BleedingDev/ultramodern.js.git",
|
|
11
|
+
"directory": "packages/cli/plugin-bff-extensions"
|
|
12
|
+
},
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"keywords": [
|
|
15
|
+
"bff",
|
|
16
|
+
"effect",
|
|
17
|
+
"framework",
|
|
18
|
+
"modern.js",
|
|
19
|
+
"ultramodern.js"
|
|
20
|
+
],
|
|
21
|
+
"version": "3.8.3-ultramodern.2",
|
|
22
|
+
"files": [
|
|
23
|
+
"dist",
|
|
24
|
+
"src"
|
|
25
|
+
],
|
|
26
|
+
"exports": {
|
|
27
|
+
"./package.json": "./package.json",
|
|
28
|
+
"./hono": {
|
|
29
|
+
"types": "./dist/types/hono/index.d.ts",
|
|
30
|
+
"node": {
|
|
31
|
+
"import": "./dist/esm-node/hono/index.mjs",
|
|
32
|
+
"require": "./dist/cjs/hono/index.js"
|
|
33
|
+
},
|
|
34
|
+
"import": "./dist/esm/hono/index.mjs",
|
|
35
|
+
"default": "./dist/esm/hono/index.mjs"
|
|
36
|
+
},
|
|
37
|
+
"./cross-project-policy": {
|
|
38
|
+
"types": "./dist/types/cross-project-policy/index.d.ts",
|
|
39
|
+
"node": {
|
|
40
|
+
"import": "./dist/esm-node/cross-project-policy/index.mjs",
|
|
41
|
+
"require": "./dist/cjs/cross-project-policy/index.js"
|
|
42
|
+
},
|
|
43
|
+
"default": "./dist/cjs/cross-project-policy/index.js"
|
|
44
|
+
},
|
|
45
|
+
"./cross-project-generation": {
|
|
46
|
+
"types": "./dist/types/cross-project-generation/index.d.ts",
|
|
47
|
+
"node": {
|
|
48
|
+
"import": "./dist/esm-node/cross-project-generation/index.mjs",
|
|
49
|
+
"require": "./dist/cjs/cross-project-generation/index.js"
|
|
50
|
+
},
|
|
51
|
+
"default": "./dist/cjs/cross-project-generation/index.js"
|
|
52
|
+
},
|
|
53
|
+
"./effect-adapter": {
|
|
54
|
+
"types": "./dist/types/effect-adapter/index.d.ts",
|
|
55
|
+
"node": {
|
|
56
|
+
"import": "./dist/esm-node/effect-adapter/index.mjs",
|
|
57
|
+
"require": "./dist/cjs/effect-adapter/index.js"
|
|
58
|
+
},
|
|
59
|
+
"default": "./dist/cjs/effect-adapter/index.js"
|
|
60
|
+
},
|
|
61
|
+
"./effect-source-loader": {
|
|
62
|
+
"types": "./dist/types/effect-source-loader/index.d.ts",
|
|
63
|
+
"node": {
|
|
64
|
+
"import": "./dist/esm-node/effect-source-loader/index.mjs",
|
|
65
|
+
"require": "./dist/cjs/effect-source-loader/index.js"
|
|
66
|
+
},
|
|
67
|
+
"default": "./dist/cjs/effect-source-loader/index.js"
|
|
68
|
+
},
|
|
69
|
+
"./client-generator": {
|
|
70
|
+
"types": "./dist/types/client-generator/index.d.ts",
|
|
71
|
+
"node": {
|
|
72
|
+
"import": "./dist/esm-node/client-generator/index.mjs",
|
|
73
|
+
"require": "./dist/cjs/client-generator/index.js"
|
|
74
|
+
},
|
|
75
|
+
"default": "./dist/cjs/client-generator/index.js"
|
|
76
|
+
},
|
|
77
|
+
"./backend-federation": {
|
|
78
|
+
"types": "./dist/types/backend-federation/index.d.ts",
|
|
79
|
+
"node": {
|
|
80
|
+
"import": "./dist/esm-node/backend-federation/index.mjs",
|
|
81
|
+
"require": "./dist/cjs/backend-federation/index.js"
|
|
82
|
+
},
|
|
83
|
+
"import": "./dist/esm/backend-federation/index.mjs",
|
|
84
|
+
"default": "./dist/esm/backend-federation/index.mjs"
|
|
85
|
+
},
|
|
86
|
+
"./backend-federation/edge": {
|
|
87
|
+
"types": "./dist/types/backend-federation/edge.d.ts",
|
|
88
|
+
"node": {
|
|
89
|
+
"import": "./dist/esm-node/backend-federation/edge.mjs",
|
|
90
|
+
"require": "./dist/cjs/backend-federation/edge.js"
|
|
91
|
+
},
|
|
92
|
+
"import": "./dist/esm/backend-federation/edge.mjs",
|
|
93
|
+
"default": "./dist/esm/backend-federation/edge.mjs"
|
|
94
|
+
},
|
|
95
|
+
"./backend-federation/node": {
|
|
96
|
+
"types": "./dist/types/backend-federation/node.d.ts",
|
|
97
|
+
"node": {
|
|
98
|
+
"import": "./dist/esm-node/backend-federation/node.mjs",
|
|
99
|
+
"require": "./dist/cjs/backend-federation/node.js"
|
|
100
|
+
},
|
|
101
|
+
"default": "./dist/cjs/backend-federation/node.js"
|
|
102
|
+
},
|
|
103
|
+
"./backend-federation-manifest": {
|
|
104
|
+
"types": "./dist/types/backend-federation-manifest/index.d.ts",
|
|
105
|
+
"node": {
|
|
106
|
+
"import": "./dist/esm-node/backend-federation-manifest/index.mjs",
|
|
107
|
+
"require": "./dist/cjs/backend-federation-manifest/index.js"
|
|
108
|
+
},
|
|
109
|
+
"default": "./dist/cjs/backend-federation-manifest/index.js"
|
|
110
|
+
},
|
|
111
|
+
"./backend-federation-manifest/node": {
|
|
112
|
+
"types": "./dist/types/backend-federation-manifest/node.d.ts",
|
|
113
|
+
"node": {
|
|
114
|
+
"import": "./dist/esm-node/backend-federation-manifest/node.mjs",
|
|
115
|
+
"require": "./dist/cjs/backend-federation-manifest/node.js"
|
|
116
|
+
},
|
|
117
|
+
"default": "./dist/cjs/backend-federation-manifest/node.js"
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
"typesVersions": {
|
|
121
|
+
"*": {
|
|
122
|
+
"hono": [
|
|
123
|
+
"./dist/types/hono/index.d.ts",
|
|
124
|
+
"./src/hono/index.ts"
|
|
125
|
+
],
|
|
126
|
+
"cross-project-policy": [
|
|
127
|
+
"./dist/types/cross-project-policy/index.d.ts",
|
|
128
|
+
"./src/cross-project-policy/index.ts"
|
|
129
|
+
],
|
|
130
|
+
"cross-project-generation": [
|
|
131
|
+
"./dist/types/cross-project-generation/index.d.ts",
|
|
132
|
+
"./src/cross-project-generation/index.ts"
|
|
133
|
+
],
|
|
134
|
+
"effect-adapter": [
|
|
135
|
+
"./dist/types/effect-adapter/index.d.ts",
|
|
136
|
+
"./src/effect-adapter/index.ts"
|
|
137
|
+
],
|
|
138
|
+
"effect-source-loader": [
|
|
139
|
+
"./dist/types/effect-source-loader/index.d.ts",
|
|
140
|
+
"./src/effect-source-loader/index.ts"
|
|
141
|
+
],
|
|
142
|
+
"client-generator": [
|
|
143
|
+
"./dist/types/client-generator/index.d.ts",
|
|
144
|
+
"./src/client-generator/index.ts"
|
|
145
|
+
],
|
|
146
|
+
"backend-federation": [
|
|
147
|
+
"./dist/types/backend-federation/index.d.ts",
|
|
148
|
+
"./src/backend-federation/index.ts"
|
|
149
|
+
],
|
|
150
|
+
"backend-federation/edge": [
|
|
151
|
+
"./dist/types/backend-federation/edge.d.ts",
|
|
152
|
+
"./src/backend-federation/edge.ts"
|
|
153
|
+
],
|
|
154
|
+
"backend-federation/node": [
|
|
155
|
+
"./dist/types/backend-federation/node.d.ts",
|
|
156
|
+
"./src/backend-federation/node.ts"
|
|
157
|
+
],
|
|
158
|
+
"backend-federation-manifest": [
|
|
159
|
+
"./dist/types/backend-federation-manifest/index.d.ts",
|
|
160
|
+
"./src/backend-federation-manifest/index.ts"
|
|
161
|
+
],
|
|
162
|
+
"backend-federation-manifest/node": [
|
|
163
|
+
"./dist/types/backend-federation-manifest/node.d.ts",
|
|
164
|
+
"./src/backend-federation-manifest/node.ts"
|
|
165
|
+
]
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
"engines": {
|
|
169
|
+
"node": ">=26.7.0"
|
|
170
|
+
},
|
|
171
|
+
"dependencies": {
|
|
172
|
+
"@modern-js/bff-core": "npm:@bleedingdev/modern-js-bff-core@3.8.3-ultramodern.2",
|
|
173
|
+
"@modern-js/bff-effect": "npm:@bleedingdev/modern-js-bff-effect@3.8.3-ultramodern.2",
|
|
174
|
+
"@modern-js/runtime-extensions": "npm:@bleedingdev/modern-js-runtime-extensions@3.8.3-ultramodern.2",
|
|
175
|
+
"@modern-js/server-core": "npm:@bleedingdev/modern-js-server-core@3.8.3-ultramodern.2",
|
|
176
|
+
"@modern-js/server-runtime-extensions": "npm:@bleedingdev/modern-js-server-runtime-extensions@3.8.3-ultramodern.2",
|
|
177
|
+
"@modern-js/types": "npm:@bleedingdev/modern-js-types@3.8.3-ultramodern.2",
|
|
178
|
+
"@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.8.3-ultramodern.2",
|
|
179
|
+
"@module-federation/runtime": "2.9.0",
|
|
180
|
+
"esbuild": "^0.28.1"
|
|
181
|
+
},
|
|
182
|
+
"peerDependencies": {
|
|
183
|
+
"@effect/opentelemetry": "4.0.0-rc.112",
|
|
184
|
+
"effect": "4.0.0-rc.112"
|
|
185
|
+
},
|
|
186
|
+
"peerDependenciesMeta": {
|
|
187
|
+
"@effect/opentelemetry": {
|
|
188
|
+
"optional": true
|
|
189
|
+
},
|
|
190
|
+
"effect": {
|
|
191
|
+
"optional": true
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
"devDependencies": {
|
|
195
|
+
"@effect/opentelemetry": "4.0.0-rc.112",
|
|
196
|
+
"@rslib/core": "0.23.2",
|
|
197
|
+
"@scripts/rstest-config": "2.66.0",
|
|
198
|
+
"@types/node": "^26.2.0",
|
|
199
|
+
"@types/react": "^19.2.18",
|
|
200
|
+
"@typescript/native-preview": "7.0.0-dev.20260707.2",
|
|
201
|
+
"effect": "4.0.0-rc.112"
|
|
202
|
+
},
|
|
203
|
+
"sideEffects": false,
|
|
204
|
+
"publishConfig": {
|
|
205
|
+
"access": "public"
|
|
206
|
+
},
|
|
207
|
+
"scripts": {
|
|
208
|
+
"pretest": "pnpm run build",
|
|
209
|
+
"dev": "rslib build --watch",
|
|
210
|
+
"build": "rslib build",
|
|
211
|
+
"test": "rstest"
|
|
212
|
+
}
|
|
213
|
+
}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import type { BackendFederationExpectedIdentity } from './identity';
|
|
2
|
+
import type { BackendFederationEntryExports } from './types';
|
|
3
|
+
import { validateLoadedBackendFederatedEffectApi } from './validate-loaded';
|
|
4
|
+
|
|
5
|
+
export type BackendFederationEdgeLoadEntryPlugin = {
|
|
6
|
+
name: string;
|
|
7
|
+
loadEntry: (args: {
|
|
8
|
+
remoteInfo: BackendFederationEdgeRemote;
|
|
9
|
+
}) =>
|
|
10
|
+
| BackendFederationEntryExports
|
|
11
|
+
| undefined
|
|
12
|
+
| Promise<BackendFederationEntryExports | undefined>;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export type BackendFederationEdgeLoadEntryPluginOptions = {
|
|
16
|
+
/**
|
|
17
|
+
* Resolve the fork-owned edge entry contract, not a raw Module Federation
|
|
18
|
+
* container. The edge runtime calls its optional `init` once per remote with
|
|
19
|
+
* `{ hostName }`, then caches each loaded expose.
|
|
20
|
+
*/
|
|
21
|
+
resolveEntry: (
|
|
22
|
+
remote: BackendFederationEdgeRemote,
|
|
23
|
+
) =>
|
|
24
|
+
| BackendFederationEntryExports
|
|
25
|
+
| undefined
|
|
26
|
+
| Promise<BackendFederationEntryExports | undefined>;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export type BackendFederationEdgeRemote = {
|
|
30
|
+
entry: `${'binding' | 'service' | 'static'}:${string}`;
|
|
31
|
+
entryGlobalName?: string;
|
|
32
|
+
expose?: string;
|
|
33
|
+
name: string;
|
|
34
|
+
shareScope?: string | string[];
|
|
35
|
+
type?: 'commonjs-module' | 'module' | string;
|
|
36
|
+
verification?: never;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
type BackendFederationEdgeRuntimeBaseOptions = {
|
|
40
|
+
entryPolicy?: never;
|
|
41
|
+
hostName: string;
|
|
42
|
+
plugins?: BackendFederationEdgeLoadEntryPlugin[];
|
|
43
|
+
remote?: BackendFederationEdgeRemote;
|
|
44
|
+
remotes?: BackendFederationEdgeRemote[];
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export type BackendFederationEdgeRuntimeOptions =
|
|
48
|
+
BackendFederationEdgeRuntimeBaseOptions & {
|
|
49
|
+
expected: BackendFederationExpectedIdentity;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
type EdgeRuntimeLoadOptions = BackendFederationEdgeRuntimeBaseOptions & {
|
|
53
|
+
allowMissingIdentityMetadata?: boolean;
|
|
54
|
+
expected?: BackendFederationExpectedIdentity;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
function parseRemoteRequest(request: string) {
|
|
58
|
+
const separator = request.indexOf('/');
|
|
59
|
+
if (separator <= 0 || separator === request.length - 1) {
|
|
60
|
+
throw new Error(
|
|
61
|
+
`[BFF][Effect] Invalid backend federation request ${request}.`,
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
expose: `./${request.slice(separator + 1).replace(/^\.\//u, '')}`,
|
|
66
|
+
remoteName: request.slice(0, separator),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function requireEdgeRemote(
|
|
71
|
+
remotes: readonly BackendFederationEdgeRemote[],
|
|
72
|
+
remoteName: string,
|
|
73
|
+
) {
|
|
74
|
+
const remote = remotes.find(candidate => candidate.name === remoteName);
|
|
75
|
+
if (remote === undefined) {
|
|
76
|
+
throw new Error(
|
|
77
|
+
`[BFF][Effect] Missing backend federation remote ${remoteName}.`,
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
if (!/^(?:binding|service|static):/u.test(remote.entry)) {
|
|
81
|
+
throw new Error(
|
|
82
|
+
`[BFF][Effect] Edge backend federation remote ${remote.name} must use static or service-binding entries.`,
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
return remote;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
async function resolveEdgeEntry(
|
|
89
|
+
plugins: readonly BackendFederationEdgeLoadEntryPlugin[],
|
|
90
|
+
remote: BackendFederationEdgeRemote,
|
|
91
|
+
) {
|
|
92
|
+
for (const plugin of plugins) {
|
|
93
|
+
const entry = await plugin.loadEntry?.({ remoteInfo: remote });
|
|
94
|
+
if (entry !== undefined) {
|
|
95
|
+
return entry;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (remote.entry.startsWith('static:') && remote.entryGlobalName) {
|
|
99
|
+
const globalEntry = (globalThis as Record<string, unknown>)[
|
|
100
|
+
remote.entryGlobalName
|
|
101
|
+
];
|
|
102
|
+
if (typeof globalEntry === 'object' && globalEntry !== null) {
|
|
103
|
+
return globalEntry as BackendFederationEntryExports;
|
|
104
|
+
}
|
|
105
|
+
throw new Error(
|
|
106
|
+
`[BFF][Effect] Missing static backend federation entry global ${remote.entryGlobalName} for remote ${remote.name}.`,
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
throw new Error(
|
|
110
|
+
`[BFF][Effect] Missing static or service-binding entry provider for backend federation remote ${remote.name}.`,
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
class EdgeBackendFederationRuntime {
|
|
115
|
+
readonly #entries = new Map<string, Promise<BackendFederationEntryExports>>();
|
|
116
|
+
readonly #expected: BackendFederationExpectedIdentity | undefined;
|
|
117
|
+
readonly #hostName: string;
|
|
118
|
+
readonly #allowMissingIdentityMetadata: boolean;
|
|
119
|
+
readonly #modules = new Map<string, Promise<unknown>>();
|
|
120
|
+
readonly #plugins: readonly BackendFederationEdgeLoadEntryPlugin[];
|
|
121
|
+
readonly #remotes: BackendFederationEdgeRemote[];
|
|
122
|
+
|
|
123
|
+
constructor(options: EdgeRuntimeLoadOptions) {
|
|
124
|
+
if (options.entryPolicy !== undefined) {
|
|
125
|
+
throw new Error(
|
|
126
|
+
'[BFF][Effect] Edge backend federation does not execute entry evaluators. Register a static or service-binding entry provider.',
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
this.#allowMissingIdentityMetadata =
|
|
130
|
+
options.allowMissingIdentityMetadata === true;
|
|
131
|
+
this.#expected = options.expected;
|
|
132
|
+
this.#hostName = options.hostName;
|
|
133
|
+
this.#plugins = options.plugins ?? [];
|
|
134
|
+
this.#remotes = [...(options.remotes ?? [])];
|
|
135
|
+
const configuredRemote = options.remote;
|
|
136
|
+
if (configuredRemote !== undefined) {
|
|
137
|
+
const existingIndex = this.#remotes.findIndex(
|
|
138
|
+
remote => remote.name === configuredRemote.name,
|
|
139
|
+
);
|
|
140
|
+
if (existingIndex >= 0) {
|
|
141
|
+
this.#remotes[existingIndex] = configuredRemote;
|
|
142
|
+
} else {
|
|
143
|
+
this.#remotes.push(configuredRemote);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
#loadEntry(remote: BackendFederationEdgeRemote) {
|
|
149
|
+
const existing = this.#entries.get(remote.name);
|
|
150
|
+
if (existing !== undefined) {
|
|
151
|
+
return existing;
|
|
152
|
+
}
|
|
153
|
+
const loading = resolveEdgeEntry(this.#plugins, remote).then(
|
|
154
|
+
async entry => {
|
|
155
|
+
await entry.init?.({ hostName: this.#hostName });
|
|
156
|
+
return entry;
|
|
157
|
+
},
|
|
158
|
+
);
|
|
159
|
+
this.#entries.set(remote.name, loading);
|
|
160
|
+
loading.catch(() => {
|
|
161
|
+
if (this.#entries.get(remote.name) === loading) {
|
|
162
|
+
this.#entries.delete(remote.name);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
return loading;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
#loadModule(request: string) {
|
|
169
|
+
const { expose, remoteName } = parseRemoteRequest(request);
|
|
170
|
+
const remote = requireEdgeRemote(this.#remotes, remoteName);
|
|
171
|
+
return this.#loadEntry(remote).then(async entry => {
|
|
172
|
+
if (typeof entry.get !== 'function') {
|
|
173
|
+
throw new Error(
|
|
174
|
+
`[BFF][Effect] Backend federation remote ${remote.name} entry must expose get().`,
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
const factory = await entry.get(expose);
|
|
178
|
+
if (typeof factory !== 'function') {
|
|
179
|
+
throw new Error(
|
|
180
|
+
`[BFF][Effect] Backend federation expose ${remote.name}/${expose.replace(/^\.\//u, '')} must load factory function.`,
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
const loaded = await factory();
|
|
184
|
+
return validateLoadedBackendFederatedEffectApi(loaded, {
|
|
185
|
+
allowMissingIdentityMetadata: this.#allowMissingIdentityMetadata,
|
|
186
|
+
expected: this.#expected,
|
|
187
|
+
remoteName,
|
|
188
|
+
remoteRequest: request,
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
async loadRemote<T>(request: string): Promise<T> {
|
|
194
|
+
const existing = this.#modules.get(request);
|
|
195
|
+
if (existing !== undefined) {
|
|
196
|
+
return existing as Promise<T>;
|
|
197
|
+
}
|
|
198
|
+
const loading = this.#loadModule(request);
|
|
199
|
+
this.#modules.set(request, loading);
|
|
200
|
+
loading.catch(() => {
|
|
201
|
+
if (this.#modules.get(request) === loading) {
|
|
202
|
+
this.#modules.delete(request);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
return loading as Promise<T>;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export type BackendFederationEdgeRuntime = {
|
|
210
|
+
loadRemote<T>(request: string): Promise<T>;
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
export function createBackendFederationLoadEntryPlugin(
|
|
214
|
+
options: BackendFederationEdgeLoadEntryPluginOptions,
|
|
215
|
+
): BackendFederationEdgeLoadEntryPlugin {
|
|
216
|
+
return {
|
|
217
|
+
name: 'modernjs-backend-federation-load-entry',
|
|
218
|
+
loadEntry({ remoteInfo }) {
|
|
219
|
+
return Promise.resolve(options.resolveEntry(remoteInfo)).then(entry => {
|
|
220
|
+
if (entry === undefined) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
return {
|
|
224
|
+
get(id: string) {
|
|
225
|
+
return () =>
|
|
226
|
+
Promise.resolve(entry.get(id)).then(factory => factory());
|
|
227
|
+
},
|
|
228
|
+
init(...args: unknown[]) {
|
|
229
|
+
return entry.init?.(...args);
|
|
230
|
+
},
|
|
231
|
+
};
|
|
232
|
+
});
|
|
233
|
+
},
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
export function createBackendFederationRuntime(
|
|
238
|
+
options: BackendFederationEdgeRuntimeOptions,
|
|
239
|
+
): BackendFederationEdgeRuntime {
|
|
240
|
+
if (
|
|
241
|
+
options.expected === undefined ||
|
|
242
|
+
typeof options.expected.unitId !== 'string' ||
|
|
243
|
+
options.expected.unitId.length === 0 ||
|
|
244
|
+
typeof options.expected.buildMarker !== 'string' ||
|
|
245
|
+
options.expected.buildMarker.length === 0
|
|
246
|
+
) {
|
|
247
|
+
throw new Error(
|
|
248
|
+
'[BFF][Effect] Edge backend federation runtime requires expected.unitId and expected.buildMarker.',
|
|
249
|
+
);
|
|
250
|
+
}
|
|
251
|
+
return new EdgeBackendFederationRuntime(options);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
export function createBackendFederationRuntimeForLoad(
|
|
255
|
+
options: EdgeRuntimeLoadOptions,
|
|
256
|
+
): BackendFederationEdgeRuntime {
|
|
257
|
+
return new EdgeBackendFederationRuntime(options);
|
|
258
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BACKEND_FEDERATION_CONTRACT_VERSION,
|
|
3
|
+
BACKEND_FEDERATION_EFFECT_EXPOSE,
|
|
4
|
+
BACKEND_FEDERATION_MANIFEST_FILE,
|
|
5
|
+
BACKEND_FEDERATION_NODE_ADAPTER_VERSION,
|
|
6
|
+
} from '@modern-js/utils/universal';
|
|
7
|
+
import {
|
|
8
|
+
type BackendFederationEdgeLoadEntryPlugin,
|
|
9
|
+
type BackendFederationEdgeLoadEntryPluginOptions,
|
|
10
|
+
type BackendFederationEdgeRemote,
|
|
11
|
+
type BackendFederationEdgeRuntimeOptions,
|
|
12
|
+
createBackendFederationRuntimeForLoad,
|
|
13
|
+
} from './edge-runtime';
|
|
14
|
+
import type { BackendFederationExpectedIdentity } from './identity';
|
|
15
|
+
import { LEGACY_LOAD_WARNING } from './legacy-warning';
|
|
16
|
+
import type {
|
|
17
|
+
BackendFederatedEffectApiModule,
|
|
18
|
+
BackendFederationLoadOptions,
|
|
19
|
+
BackendFederationIdentityLoadOptions as UniversalBackendFederationIdentityLoadOptions,
|
|
20
|
+
} from './types';
|
|
21
|
+
import { normalizeExpose } from './utils';
|
|
22
|
+
|
|
23
|
+
export {
|
|
24
|
+
type BackendFederationEdgeLoadEntryPlugin,
|
|
25
|
+
type BackendFederationEdgeLoadEntryPluginOptions,
|
|
26
|
+
type BackendFederationEdgeRemote,
|
|
27
|
+
type BackendFederationEdgeRuntime,
|
|
28
|
+
type BackendFederationEdgeRuntimeOptions,
|
|
29
|
+
createBackendFederationLoadEntryPlugin,
|
|
30
|
+
createBackendFederationRuntime,
|
|
31
|
+
} from './edge-runtime';
|
|
32
|
+
export {
|
|
33
|
+
type BackendFederationExpectedIdentity,
|
|
34
|
+
type BackendFederationIdentityIssue,
|
|
35
|
+
validateExpectedBackendFederationIdentity,
|
|
36
|
+
} from './identity';
|
|
37
|
+
export type {
|
|
38
|
+
BackendFederatedEffectApiModule,
|
|
39
|
+
BackendFederationEntryExports,
|
|
40
|
+
} from './types';
|
|
41
|
+
|
|
42
|
+
export {
|
|
43
|
+
BACKEND_FEDERATION_CONTRACT_VERSION,
|
|
44
|
+
BACKEND_FEDERATION_EFFECT_EXPOSE,
|
|
45
|
+
BACKEND_FEDERATION_MANIFEST_FILE,
|
|
46
|
+
BACKEND_FEDERATION_NODE_ADAPTER_VERSION,
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export type BackendFederationRemote = BackendFederationEdgeRemote;
|
|
50
|
+
export type BackendFederationRuntimeOptions =
|
|
51
|
+
BackendFederationEdgeRuntimeOptions;
|
|
52
|
+
export type BackendFederationLoadEntryPluginOptions =
|
|
53
|
+
BackendFederationEdgeLoadEntryPluginOptions;
|
|
54
|
+
|
|
55
|
+
export type EdgeBackendFederationLoadOptions = Omit<
|
|
56
|
+
BackendFederationLoadOptions,
|
|
57
|
+
'entryPolicy' | 'plugins' | 'remote' | 'remotes' | 'runtime'
|
|
58
|
+
> & {
|
|
59
|
+
entryPolicy?: never;
|
|
60
|
+
plugins?: BackendFederationEdgeLoadEntryPlugin[];
|
|
61
|
+
remote?: BackendFederationEdgeRemote;
|
|
62
|
+
remotes?: BackendFederationEdgeRemote[];
|
|
63
|
+
runtime?: never;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export type EdgeBackendFederationIdentityLoadOptions = Omit<
|
|
67
|
+
UniversalBackendFederationIdentityLoadOptions,
|
|
68
|
+
'entryPolicy' | 'plugins' | 'remote' | 'remotes' | 'runtime'
|
|
69
|
+
> & {
|
|
70
|
+
entryPolicy?: never;
|
|
71
|
+
plugins?: BackendFederationEdgeLoadEntryPlugin[];
|
|
72
|
+
remote?: BackendFederationEdgeRemote;
|
|
73
|
+
remotes?: BackendFederationEdgeRemote[];
|
|
74
|
+
runtime?: never;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export type BackendFederationIdentityLoadOptions =
|
|
78
|
+
EdgeBackendFederationIdentityLoadOptions;
|
|
79
|
+
|
|
80
|
+
export function loadBackendFederatedEffectApi(
|
|
81
|
+
options: EdgeBackendFederationIdentityLoadOptions,
|
|
82
|
+
): Promise<BackendFederatedEffectApiModule>;
|
|
83
|
+
/** @deprecated Pass `expected` delivery-unit identity. */
|
|
84
|
+
export function loadBackendFederatedEffectApi(
|
|
85
|
+
options: EdgeBackendFederationLoadOptions,
|
|
86
|
+
): Promise<BackendFederatedEffectApiModule>;
|
|
87
|
+
export function loadBackendFederatedEffectApi(
|
|
88
|
+
options: EdgeBackendFederationLoadOptions & {
|
|
89
|
+
expected?: BackendFederationExpectedIdentity;
|
|
90
|
+
allowMissingIdentityMetadata?: boolean;
|
|
91
|
+
},
|
|
92
|
+
): Promise<BackendFederatedEffectApiModule> {
|
|
93
|
+
if (
|
|
94
|
+
(options as BackendFederationLoadOptions).runtime !== undefined ||
|
|
95
|
+
(options as BackendFederationLoadOptions).entryPolicy !== undefined
|
|
96
|
+
) {
|
|
97
|
+
return Promise.reject(
|
|
98
|
+
new Error(
|
|
99
|
+
'[BFF][Effect] Edge backend federation does not execute custom runtimes or entry evaluators. Register a static or service-binding entry provider.',
|
|
100
|
+
),
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const remoteName = options.remote?.name ?? options.remoteName;
|
|
105
|
+
if (remoteName === undefined || remoteName.length === 0) {
|
|
106
|
+
return Promise.reject(
|
|
107
|
+
new Error('[BFF][Effect] Missing backend federation remote name.'),
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (options.expected === undefined) {
|
|
112
|
+
console.warn(LEGACY_LOAD_WARNING);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const expose =
|
|
116
|
+
options.expose ??
|
|
117
|
+
options.remote?.expose ??
|
|
118
|
+
BACKEND_FEDERATION_EFFECT_EXPOSE;
|
|
119
|
+
const remoteRequest = `${remoteName}/${normalizeExpose(expose)}`;
|
|
120
|
+
|
|
121
|
+
let runtime;
|
|
122
|
+
try {
|
|
123
|
+
runtime = createBackendFederationRuntimeForLoad(options);
|
|
124
|
+
} catch (error) {
|
|
125
|
+
return Promise.reject(error);
|
|
126
|
+
}
|
|
127
|
+
return runtime.loadRemote(remoteRequest);
|
|
128
|
+
}
|