@bleedingdev/modern-js-plugin-bff-extensions 3.9.0-ultramodern.2 → 3.9.0-ultramodern.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -5
- package/dist/cjs/backend-federation/edge-runtime.js +3 -15
- package/dist/cjs/backend-federation/edge.js +9 -10
- package/dist/cjs/backend-federation/identity.js +26 -31
- package/dist/cjs/backend-federation/index.js +5 -5
- package/dist/cjs/backend-federation/integrity-plugin.js +112 -0
- package/dist/cjs/backend-federation/load.js +3 -13
- package/dist/cjs/backend-federation/node-shared.js +85 -0
- package/dist/cjs/backend-federation/node.js +6 -1
- package/dist/cjs/backend-federation/plugin.js +40 -21
- package/dist/cjs/backend-federation/runtime.js +16 -84
- package/dist/cjs/backend-federation/validate-loaded.js +2 -4
- package/dist/cjs/backend-federation-manifest/load.js +40 -12
- package/dist/cjs/backend-federation-manifest/metadata.js +3 -3
- package/dist/cjs/backend-federation-manifest/node.js +3 -1
- package/dist/cjs/backend-federation-manifest/remote.js +3 -9
- package/dist/cjs/backend-federation-manifest/validation.js +16 -12
- package/dist/cjs/cross-project-policy/evaluation.js +3 -3
- package/dist/cjs/cross-project-policy/node.js +11 -30
- package/dist/cjs/{backend-federation/legacy-warning.js → cross-project-policy/producer-runtime.js} +23 -5
- package/dist/cjs/{effect-adapter → effect-server}/cross-project-policy.js +5 -5
- package/dist/cjs/effect-server/entry.js +63 -0
- package/dist/cjs/{effect-adapter → effect-server}/error-response.js +4 -4
- package/dist/cjs/effect-server/index.js +199 -0
- package/dist/cjs/{client-generator → effect-source-loader}/built-entry.js +5 -6
- package/dist/cjs/{client-generator/runtime.js → effect-source-loader/http-api-runtime.js} +12 -20
- package/dist/cjs/effect-source-loader/index.js +18 -6
- package/dist/cjs/effect-source-loader/loader.js +17 -30
- package/dist/cjs/effect-source-loader/operation-contracts.js +60 -0
- package/dist/cjs/effect-source-loader/paths.js +90 -0
- package/dist/cjs/effect-source-loader/rspack-loader.js +73 -0
- package/dist/cjs/effect-source-loader/worker-runtime-source.js +71 -0
- package/dist/cjs/effect-source-loader/worker-runtime-wrapper.js +7 -50
- package/dist/cjs/hono/cross-project-policy.js +2 -1
- package/dist/cjs/{client-generator/paths.js → hono/node.js} +14 -25
- package/dist/esm/backend-federation/edge-runtime.mjs +2 -11
- package/dist/esm/backend-federation/edge.mjs +5 -6
- package/dist/esm/backend-federation/identity.mjs +21 -32
- package/dist/esm/backend-federation/index.mjs +1 -1
- package/dist/esm/backend-federation/integrity-plugin.mjs +68 -0
- package/dist/esm/backend-federation/load.mjs +2 -12
- package/dist/esm/backend-federation/node-shared.mjs +41 -0
- package/dist/esm/backend-federation/node.mjs +4 -2
- package/dist/esm/backend-federation/plugin.mjs +37 -18
- package/dist/esm/backend-federation/runtime.mjs +16 -84
- package/dist/esm/backend-federation/validate-loaded.mjs +2 -4
- package/dist/esm/backend-federation-manifest/load.mjs +40 -12
- package/dist/esm/backend-federation-manifest/metadata.mjs +1 -1
- package/dist/esm/backend-federation-manifest/node.mjs +3 -1
- package/dist/esm/backend-federation-manifest/remote.mjs +2 -8
- package/dist/esm/backend-federation-manifest/validation.mjs +15 -11
- package/dist/esm/cross-project-policy/evaluation.mjs +1 -1
- package/dist/esm/cross-project-policy/node.mjs +10 -19
- package/dist/esm/cross-project-policy/producer-runtime.mjs +20 -0
- package/dist/esm/{effect-adapter → effect-server}/cross-project-policy.mjs +3 -3
- package/dist/esm/effect-server/entry.mjs +15 -0
- package/dist/esm/{effect-adapter → effect-server}/error-response.mjs +2 -2
- package/dist/esm/effect-server/index.mjs +151 -0
- package/dist/esm/{client-generator → effect-source-loader}/built-entry.mjs +6 -7
- package/dist/esm/effect-source-loader/http-api-runtime.mjs +19 -0
- package/dist/esm/effect-source-loader/index.mjs +5 -2
- package/dist/esm/effect-source-loader/loader.mjs +17 -30
- package/dist/esm/effect-source-loader/operation-contracts.mjs +22 -0
- package/dist/esm/effect-source-loader/paths.mjs +43 -0
- package/dist/esm/effect-source-loader/rspack-loader.mjs +35 -0
- package/dist/esm/effect-source-loader/worker-runtime-source.mjs +23 -0
- package/dist/esm/effect-source-loader/worker-runtime-wrapper.mjs +5 -45
- package/dist/esm/hono/cross-project-policy.mjs +2 -1
- package/dist/esm-node/backend-federation/edge-runtime.mjs +2 -11
- package/dist/esm-node/backend-federation/edge.mjs +5 -6
- package/dist/esm-node/backend-federation/identity.mjs +21 -32
- package/dist/esm-node/backend-federation/index.mjs +1 -1
- package/dist/esm-node/backend-federation/integrity-plugin.mjs +69 -0
- package/dist/esm-node/backend-federation/load.mjs +2 -12
- package/dist/esm-node/backend-federation/node-shared.mjs +42 -0
- package/dist/esm-node/backend-federation/node.mjs +4 -2
- package/dist/esm-node/backend-federation/plugin.mjs +37 -18
- package/dist/esm-node/backend-federation/runtime.mjs +16 -84
- package/dist/esm-node/backend-federation/validate-loaded.mjs +2 -4
- package/dist/esm-node/backend-federation-manifest/load.mjs +40 -12
- package/dist/esm-node/backend-federation-manifest/metadata.mjs +1 -1
- package/dist/esm-node/backend-federation-manifest/node.mjs +3 -1
- package/dist/esm-node/backend-federation-manifest/remote.mjs +2 -8
- package/dist/esm-node/backend-federation-manifest/validation.mjs +15 -11
- package/dist/esm-node/cross-project-policy/evaluation.mjs +1 -1
- package/dist/esm-node/cross-project-policy/node.mjs +10 -19
- package/dist/esm-node/cross-project-policy/producer-runtime.mjs +21 -0
- package/dist/esm-node/{effect-adapter → effect-server}/cross-project-policy.mjs +3 -3
- package/dist/esm-node/effect-server/entry.mjs +16 -0
- package/dist/esm-node/{effect-adapter → effect-server}/error-response.mjs +2 -2
- package/dist/esm-node/effect-server/index.mjs +152 -0
- package/dist/esm-node/{client-generator → effect-source-loader}/built-entry.mjs +6 -7
- package/dist/esm-node/effect-source-loader/http-api-runtime.mjs +20 -0
- package/dist/esm-node/effect-source-loader/index.mjs +5 -2
- package/dist/esm-node/effect-source-loader/loader.mjs +17 -30
- package/dist/esm-node/effect-source-loader/operation-contracts.mjs +23 -0
- package/dist/esm-node/effect-source-loader/paths.mjs +44 -0
- package/dist/esm-node/effect-source-loader/rspack-loader.mjs +37 -0
- package/dist/esm-node/effect-source-loader/worker-runtime-source.mjs +24 -0
- package/dist/esm-node/effect-source-loader/worker-runtime-wrapper.mjs +5 -45
- package/dist/esm-node/hono/cross-project-policy.mjs +2 -1
- package/dist/esm-node/hono/node.mjs +14 -0
- package/dist/types/backend-federation/edge-runtime.d.ts +0 -5
- package/dist/types/backend-federation/edge.d.ts +5 -5
- package/dist/types/backend-federation/identity.d.ts +4 -16
- package/dist/types/backend-federation/index.d.ts +1 -1
- package/dist/types/backend-federation/integrity-plugin.d.ts +13 -0
- package/dist/types/backend-federation/load.d.ts +1 -7
- package/dist/types/backend-federation/node-shared.d.ts +20 -0
- package/dist/types/backend-federation/node.d.ts +4 -3
- package/dist/types/backend-federation/plugin.d.ts +4 -0
- package/dist/types/backend-federation/types.d.ts +3 -14
- package/dist/types/backend-federation/validate-loaded.d.ts +1 -2
- package/dist/types/backend-federation-manifest/metadata.d.ts +0 -6
- package/dist/types/backend-federation-manifest/types.d.ts +2 -1
- package/dist/types/cross-project-policy/evaluation.d.ts +1 -1
- package/dist/types/cross-project-policy/node.d.ts +3 -2
- package/dist/types/cross-project-policy/producer-runtime.d.ts +20 -0
- package/dist/types/effect-server/cross-project-policy.d.ts +5 -0
- package/dist/types/effect-server/entry.d.ts +3 -0
- package/dist/types/effect-server/error-response.d.ts +2 -0
- package/dist/types/effect-server/index.d.ts +4 -0
- package/dist/types/effect-source-loader/index.d.ts +5 -2
- package/dist/types/effect-source-loader/operation-contracts.d.ts +8 -0
- package/dist/types/effect-source-loader/paths.d.ts +23 -0
- package/dist/types/effect-source-loader/rspack-loader.d.ts +9 -0
- package/dist/types/effect-source-loader/worker-runtime-source.d.ts +4 -0
- package/dist/types/effect-source-loader/worker-runtime-wrapper.d.ts +4 -22
- package/dist/types/hono/node.d.ts +4 -0
- package/package.json +64 -36
- package/src/backend-federation/edge-runtime.ts +2 -13
- package/src/backend-federation/edge.ts +16 -21
- package/src/backend-federation/identity.ts +39 -65
- package/src/backend-federation/index.ts +1 -1
- package/src/backend-federation/integrity-plugin.ts +157 -0
- package/src/backend-federation/load.ts +7 -35
- package/src/backend-federation/node-shared.ts +76 -0
- package/src/backend-federation/node.ts +7 -14
- package/src/backend-federation/plugin.ts +73 -25
- package/src/backend-federation/runtime.ts +16 -90
- package/src/backend-federation/types.ts +3 -18
- package/src/backend-federation/validate-loaded.ts +2 -7
- package/src/backend-federation-manifest/load.ts +93 -38
- package/src/backend-federation-manifest/metadata.ts +1 -7
- package/src/backend-federation-manifest/node.ts +3 -2
- package/src/backend-federation-manifest/remote.ts +1 -7
- package/src/backend-federation-manifest/types.ts +2 -0
- package/src/backend-federation-manifest/validation.ts +29 -39
- package/src/cross-project-policy/evaluation.ts +1 -1
- package/src/cross-project-policy/node.ts +10 -41
- package/src/cross-project-policy/producer-runtime.ts +43 -0
- package/src/{effect-adapter → effect-server}/cross-project-policy.ts +8 -2
- package/src/effect-server/entry.ts +18 -0
- package/src/{effect-adapter → effect-server}/error-response.ts +1 -1
- package/src/effect-server/index.ts +242 -0
- package/src/{client-generator → effect-source-loader}/built-entry.ts +12 -12
- package/src/effect-source-loader/http-api-runtime.ts +39 -0
- package/src/effect-source-loader/index.ts +8 -5
- package/src/effect-source-loader/loader.ts +47 -52
- package/src/effect-source-loader/operation-contracts.ts +38 -0
- package/src/effect-source-loader/paths.ts +74 -0
- package/src/effect-source-loader/rspack-loader.ts +71 -0
- package/src/effect-source-loader/worker-runtime-source.ts +34 -0
- package/src/effect-source-loader/worker-runtime-wrapper.ts +5 -75
- package/src/hono/cross-project-policy.ts +2 -1
- package/src/hono/node.ts +24 -0
- package/dist/cjs/backend-federation/entry.js +0 -94
- package/dist/cjs/client-generator/generator.js +0 -73
- package/dist/cjs/client-generator/index.js +0 -54
- package/dist/cjs/client-generator/rendering.js +0 -253
- package/dist/cjs/client-generator/types.js +0 -18
- package/dist/cjs/effect-adapter/entry.js +0 -98
- package/dist/cjs/effect-adapter/index.js +0 -187
- package/dist/esm/backend-federation/entry.mjs +0 -56
- package/dist/esm/backend-federation/legacy-warning.mjs +0 -2
- package/dist/esm/client-generator/generator.mjs +0 -32
- package/dist/esm/client-generator/index.mjs +0 -3
- package/dist/esm/client-generator/paths.mjs +0 -24
- package/dist/esm/client-generator/rendering.mjs +0 -209
- package/dist/esm/client-generator/runtime.mjs +0 -27
- package/dist/esm/client-generator/types.mjs +0 -0
- package/dist/esm/effect-adapter/entry.mjs +0 -50
- package/dist/esm/effect-adapter/index.mjs +0 -139
- package/dist/esm-node/backend-federation/entry.mjs +0 -57
- package/dist/esm-node/backend-federation/legacy-warning.mjs +0 -3
- package/dist/esm-node/client-generator/generator.mjs +0 -33
- package/dist/esm-node/client-generator/index.mjs +0 -4
- package/dist/esm-node/client-generator/paths.mjs +0 -25
- package/dist/esm-node/client-generator/rendering.mjs +0 -210
- package/dist/esm-node/client-generator/runtime.mjs +0 -29
- package/dist/esm-node/client-generator/types.mjs +0 -1
- package/dist/esm-node/effect-adapter/entry.mjs +0 -51
- package/dist/esm-node/effect-adapter/index.mjs +0 -140
- package/dist/types/backend-federation/entry.d.ts +0 -2
- package/dist/types/backend-federation/legacy-warning.d.ts +0 -1
- package/dist/types/client-generator/generator.d.ts +0 -3
- package/dist/types/client-generator/index.d.ts +0 -4
- package/dist/types/client-generator/paths.d.ts +0 -5
- package/dist/types/client-generator/rendering.d.ts +0 -24
- package/dist/types/client-generator/types.d.ts +0 -33
- package/dist/types/effect-adapter/cross-project-policy.d.ts +0 -4
- package/dist/types/effect-adapter/entry.d.ts +0 -2
- package/dist/types/effect-adapter/error-response.d.ts +0 -2
- package/dist/types/effect-adapter/index.d.ts +0 -19
- package/src/backend-federation/entry.ts +0 -125
- package/src/backend-federation/legacy-warning.ts +0 -2
- package/src/client-generator/generator.ts +0 -52
- package/src/client-generator/index.ts +0 -10
- package/src/client-generator/paths.ts +0 -40
- package/src/client-generator/rendering.ts +0 -307
- package/src/client-generator/runtime.ts +0 -69
- package/src/client-generator/types.ts +0 -35
- package/src/effect-adapter/entry.ts +0 -95
- package/src/effect-adapter/index.ts +0 -246
- /package/dist/types/{client-generator → effect-source-loader}/built-entry.d.ts +0 -0
- /package/dist/types/{client-generator/runtime.d.ts → effect-source-loader/http-api-runtime.d.ts} +0 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.n = (module)=>{
|
|
5
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
6
|
+
__webpack_require__.d(getter, {
|
|
7
|
+
a: getter
|
|
8
|
+
});
|
|
9
|
+
return getter;
|
|
10
|
+
};
|
|
11
|
+
})();
|
|
12
|
+
(()=>{
|
|
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");
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
(()=>{
|
|
25
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
26
|
+
})();
|
|
27
|
+
(()=>{
|
|
28
|
+
__webpack_require__.r = (exports1)=>{
|
|
29
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
30
|
+
value: 'Module'
|
|
31
|
+
});
|
|
32
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
33
|
+
value: true
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
})();
|
|
37
|
+
var __webpack_exports__ = {};
|
|
38
|
+
__webpack_require__.r(__webpack_exports__);
|
|
39
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
40
|
+
default: ()=>effect_server
|
|
41
|
+
});
|
|
42
|
+
const external_node_path_namespaceObject = require("node:path");
|
|
43
|
+
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
44
|
+
require("@modern-js/server-runtime-extensions/server-config");
|
|
45
|
+
const effect_namespaceObject = require("@modern-js/bff-effect/effect");
|
|
46
|
+
const node_namespaceObject = require("@modern-js/server-runtime-extensions/bff-policy/node");
|
|
47
|
+
const runtime_lifecycle_namespaceObject = require("@modern-js/server-runtime-extensions/runtime-lifecycle");
|
|
48
|
+
const utils_namespaceObject = require("@modern-js/utils");
|
|
49
|
+
const evaluation_js_namespaceObject = require("../cross-project-policy/evaluation.js");
|
|
50
|
+
const loader_js_namespaceObject = require("../effect-source-loader/loader.js");
|
|
51
|
+
const external_cross_project_policy_js_namespaceObject = require("./cross-project-policy.js");
|
|
52
|
+
const external_entry_js_namespaceObject = require("./entry.js");
|
|
53
|
+
const external_error_response_js_namespaceObject = require("./error-response.js");
|
|
54
|
+
const EFFECT_MIDDLEWARE_BEFORE = [
|
|
55
|
+
'custom-server-hook',
|
|
56
|
+
'custom-server-middleware',
|
|
57
|
+
'render'
|
|
58
|
+
];
|
|
59
|
+
const effect_server = ()=>({
|
|
60
|
+
name: '@modern-js/plugin-bff-extensions/effect-server',
|
|
61
|
+
setup (api) {
|
|
62
|
+
const runtimeFramework = api.getServerContext().bffRuntimeFramework;
|
|
63
|
+
if ('effect' !== runtimeFramework) throw new Error(`Effect BFF server plugin requires Effect; received "${runtimeFramework}".`);
|
|
64
|
+
let handler = null;
|
|
65
|
+
let unregisterRuntimeDisposer;
|
|
66
|
+
let prefix = '/api';
|
|
67
|
+
let prefixes = [
|
|
68
|
+
'/api'
|
|
69
|
+
];
|
|
70
|
+
let matchingPrefixes = [
|
|
71
|
+
'/api'
|
|
72
|
+
];
|
|
73
|
+
let retired = false;
|
|
74
|
+
const dispose = async ()=>{
|
|
75
|
+
retired = true;
|
|
76
|
+
unregisterRuntimeDisposer?.();
|
|
77
|
+
unregisterRuntimeDisposer = void 0;
|
|
78
|
+
const previous = handler;
|
|
79
|
+
handler = null;
|
|
80
|
+
await previous?.dispose();
|
|
81
|
+
};
|
|
82
|
+
const loadHandler = async ()=>{
|
|
83
|
+
const entryFile = (0, external_entry_js_namespaceObject.resolveEffectServerEntryFile)(api);
|
|
84
|
+
if (!entryFile || !await utils_namespaceObject.fs.pathExists(entryFile)) {
|
|
85
|
+
handler = null;
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const { appDirectory } = api.getServerContext();
|
|
89
|
+
let mod;
|
|
90
|
+
try {
|
|
91
|
+
mod = await ((0, utils_namespaceObject.isProd)() ? (0, loader_js_namespaceObject.loadEffectBuiltModule)(entryFile) : (0, loader_js_namespaceObject.loadEffectSourceModule)({
|
|
92
|
+
resourcePath: entryFile,
|
|
93
|
+
appDir: appDirectory || external_node_path_default().dirname(entryFile)
|
|
94
|
+
}));
|
|
95
|
+
} catch (error) {
|
|
96
|
+
utils_namespaceObject.logger.error(`[BFF][Effect] Failed to load Effect entry: ${entryFile}\n${String(error)}`);
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
const producer = (0, node_namespaceObject.resolveOperationProducer)({
|
|
100
|
+
directories: [
|
|
101
|
+
external_node_path_default().dirname(entryFile),
|
|
102
|
+
appDirectory
|
|
103
|
+
],
|
|
104
|
+
requestId: api.getServerConfig()?.bff?.requestId
|
|
105
|
+
});
|
|
106
|
+
const crossProjectPolicies = new Map(await Promise.all(prefixes.map(async (prefix)=>[
|
|
107
|
+
prefix,
|
|
108
|
+
await (0, external_cross_project_policy_js_namespaceObject.resolveEffectServerCrossProjectPolicy)(api, prefix, mod, producer)
|
|
109
|
+
])));
|
|
110
|
+
const effectConfig = api.getServerConfig()?.bff?.effect;
|
|
111
|
+
const loaded = await (0, effect_namespaceObject.resolveEffectBffModuleHandler)(mod, {
|
|
112
|
+
openapi: effectConfig?.openapi,
|
|
113
|
+
dataPlatform: effectConfig?.dataPlatform,
|
|
114
|
+
validateRequest: (request)=>{
|
|
115
|
+
const { path: mountedPathname } = (0, effect_namespaceObject.useEffectContext)();
|
|
116
|
+
const prefix = matchingPrefixes.find((item)=>'/' === item || mountedPathname === item || mountedPathname.startsWith(`${item}/`));
|
|
117
|
+
if (!prefix) return null;
|
|
118
|
+
const requestUrl = new URL(request.url);
|
|
119
|
+
if ('/' !== prefix) requestUrl.pathname = '/' === requestUrl.pathname ? prefix : `${prefix}${requestUrl.pathname}`;
|
|
120
|
+
return (0, evaluation_js_namespaceObject.checkCrossProjectPolicyForRequest)(new Request(requestUrl, request), crossProjectPolicies.get(prefix));
|
|
121
|
+
},
|
|
122
|
+
onWarning: (message)=>utils_namespaceObject.logger.warn(message)
|
|
123
|
+
});
|
|
124
|
+
if (!loaded) {
|
|
125
|
+
const error = new Error(`[BFF][Effect] Invalid Effect entry module: ${entryFile}. Export defineEffectBff(...) or a { api, layer } HttpApi module.`);
|
|
126
|
+
utils_namespaceObject.logger.warn(error.message);
|
|
127
|
+
throw error;
|
|
128
|
+
}
|
|
129
|
+
const candidateOwner = {};
|
|
130
|
+
if (loaded.dispose) (0, runtime_lifecycle_namespaceObject.registerServerRuntimeDisposer)(candidateOwner, loaded.dispose);
|
|
131
|
+
const candidate = (0, runtime_lifecycle_namespaceObject.createDisposableServerRuntimeHandle)(candidateOwner, loaded.handler);
|
|
132
|
+
if (retired) {
|
|
133
|
+
await candidate.dispose();
|
|
134
|
+
throw new Error('Cannot initialize a retired Effect server.');
|
|
135
|
+
}
|
|
136
|
+
handler = candidate;
|
|
137
|
+
};
|
|
138
|
+
api.onPrepare(async ()=>{
|
|
139
|
+
const { middlewares: globalMiddlewares } = api.getServerContext();
|
|
140
|
+
const configuredPrefix = api.getServerConfig()?.bff?.prefix;
|
|
141
|
+
const enableHandleWeb = api.getServerConfig()?.bff?.enableHandleWeb;
|
|
142
|
+
const configuredPrefixes = Array.isArray(configuredPrefix) ? configuredPrefix.filter(Boolean) : [
|
|
143
|
+
configuredPrefix || '/api'
|
|
144
|
+
];
|
|
145
|
+
prefixes = [
|
|
146
|
+
...new Set(configuredPrefixes.length > 0 ? configuredPrefixes : [
|
|
147
|
+
'/api'
|
|
148
|
+
])
|
|
149
|
+
];
|
|
150
|
+
matchingPrefixes = [
|
|
151
|
+
...prefixes
|
|
152
|
+
].sort((left, right)=>right.length - left.length);
|
|
153
|
+
prefix = prefixes[0] || '/api';
|
|
154
|
+
const { serverBase } = api.getServerContext();
|
|
155
|
+
if (serverBase) unregisterRuntimeDisposer = (0, runtime_lifecycle_namespaceObject.registerServerRuntimeDisposer)(serverBase, dispose);
|
|
156
|
+
try {
|
|
157
|
+
await loadHandler();
|
|
158
|
+
} catch (error) {
|
|
159
|
+
await dispose();
|
|
160
|
+
throw error;
|
|
161
|
+
}
|
|
162
|
+
const middlewarePrefixes = enableHandleWeb ? [
|
|
163
|
+
prefix
|
|
164
|
+
] : matchingPrefixes;
|
|
165
|
+
const middlewares = middlewarePrefixes.map((middlewarePrefix)=>({
|
|
166
|
+
name: 'effect-api-handler',
|
|
167
|
+
path: enableHandleWeb ? '*' : `${middlewarePrefix}/*`,
|
|
168
|
+
method: 'all',
|
|
169
|
+
order: 'post',
|
|
170
|
+
before: EFFECT_MIDDLEWARE_BEFORE,
|
|
171
|
+
handler: async (context, next)=>{
|
|
172
|
+
const activeHandler = handler;
|
|
173
|
+
if (!activeHandler) {
|
|
174
|
+
if (enableHandleWeb) return void await next();
|
|
175
|
+
return (0, external_error_response_js_namespaceObject.createEffectServerRuntimeErrorResponse)(api, new Error('[BFF][Effect] Missing Effect entry. Define api/index or configure bff.effect.entry.'), context);
|
|
176
|
+
}
|
|
177
|
+
const mountedPrefix = enableHandleWeb ? matchingPrefixes.find((item)=>'/' === item || context.req.path === item || context.req.path.startsWith(`${item}/`)) || prefix : middlewarePrefix;
|
|
178
|
+
const response = await (0, effect_namespaceObject.dispatchEffectBffRequest)(activeHandler, context.req.raw, {
|
|
179
|
+
prefix: mountedPrefix,
|
|
180
|
+
env: context.env,
|
|
181
|
+
path: context.req.path,
|
|
182
|
+
method: context.req.method,
|
|
183
|
+
onError: (error)=>(0, external_error_response_js_namespaceObject.createEffectServerRuntimeErrorResponse)(api, error, context)
|
|
184
|
+
});
|
|
185
|
+
if (404 === response.status && enableHandleWeb) return void await next();
|
|
186
|
+
return new Response(response.body, response);
|
|
187
|
+
}
|
|
188
|
+
}));
|
|
189
|
+
globalMiddlewares.push(...middlewares);
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
exports["default"] = __webpack_exports__["default"];
|
|
194
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
195
|
+
"default"
|
|
196
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
197
|
+
Object.defineProperty(exports, '__esModule', {
|
|
198
|
+
value: true
|
|
199
|
+
});
|
|
@@ -34,12 +34,11 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
34
34
|
});
|
|
35
35
|
const utils_namespaceObject = require("@modern-js/utils");
|
|
36
36
|
const external_paths_js_namespaceObject = require("./paths.js");
|
|
37
|
-
const BUILT_ENTRY_EXT = /\.(?:[cm]?ts|tsx|jsx)$/u;
|
|
38
37
|
function resolveBuiltEffectEntry(appDirectory, distDirectory, sourceEntry) {
|
|
39
38
|
if (void 0 === sourceEntry || 0 === sourceEntry.length) return;
|
|
40
|
-
const relativeEntry =
|
|
41
|
-
if (
|
|
42
|
-
const builtEntry = utils_namespaceObject.upath.resolve(distDirectory, relativeEntry)
|
|
39
|
+
const relativeEntry = (0, external_paths_js_namespaceObject.relativeEffectAppPath)(appDirectory, sourceEntry);
|
|
40
|
+
if (void 0 === relativeEntry) throw new Error(`Effect BFF entry must be inside the application directory: ${sourceEntry}`);
|
|
41
|
+
const builtEntry = (0, external_paths_js_namespaceObject.emittedEffectEntry)(utils_namespaceObject.upath.resolve(distDirectory, relativeEntry));
|
|
43
42
|
return utils_namespaceObject.fs.existsSync(builtEntry) ? builtEntry : void 0;
|
|
44
43
|
}
|
|
45
44
|
async function bundleBuiltEffectEntryForNode(options) {
|
|
@@ -51,7 +50,7 @@ async function bundleBuiltEffectEntryForNode(options) {
|
|
|
51
50
|
});
|
|
52
51
|
const builtEntry = resolveBuiltEffectEntry(appDir, distDir, sourceEntry);
|
|
53
52
|
if (void 0 === builtEntry || 0 === builtEntry.length) throw new Error(`Effect BFF entry was not emitted into ${distDir}: ${sourceEntry ?? utils_namespaceObject.upath.resolve(apiDir, 'index')}`);
|
|
54
|
-
const { bundleEffectEntryForNode } = await import("
|
|
53
|
+
const { bundleEffectEntryForNode } = await import("./loader.js");
|
|
55
54
|
return bundleEffectEntryForNode({
|
|
56
55
|
appDir,
|
|
57
56
|
entryPath: builtEntry,
|
|
@@ -65,7 +64,7 @@ function resolveEffectEntryPaths(options) {
|
|
|
65
64
|
apiDir,
|
|
66
65
|
effectEntry
|
|
67
66
|
});
|
|
68
|
-
const relativeEffectEntry = void 0 !== sourceEffectEntry && sourceEffectEntry.length > 0 ? utils_namespaceObject.upath.relative(appDir, sourceEffectEntry)
|
|
67
|
+
const relativeEffectEntry = void 0 !== sourceEffectEntry && sourceEffectEntry.length > 0 ? (0, external_paths_js_namespaceObject.emittedEffectEntry)(utils_namespaceObject.upath.relative(appDir, sourceEffectEntry)) : '';
|
|
69
68
|
return {
|
|
70
69
|
sourceEffectEntry,
|
|
71
70
|
relativeEffectEntry
|
|
@@ -32,30 +32,22 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
32
32
|
loadEffectApi: ()=>loadEffectApi
|
|
33
33
|
});
|
|
34
34
|
const effect_namespaceObject = require("@modern-js/bff-effect/effect");
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
-
let httpApiRuntimePromise;
|
|
38
|
-
function isRecord(value) {
|
|
39
|
-
return 'object' == typeof value && null !== value;
|
|
40
|
-
}
|
|
41
|
-
function isHttpApiRuntime(value) {
|
|
42
|
-
return isRecord(value) && 'function' == typeof value.isHttpApi && 'function' == typeof value.reflect;
|
|
43
|
-
}
|
|
35
|
+
const httpapi_namespaceObject = require("effect/unstable/httpapi");
|
|
36
|
+
const external_loader_js_namespaceObject = require("./loader.js");
|
|
44
37
|
function getHttpApiRuntime() {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
38
|
+
return Promise.resolve({
|
|
39
|
+
isHttpApi: httpapi_namespaceObject.HttpApi.isHttpApi,
|
|
40
|
+
reflect: (api, handlers)=>{
|
|
41
|
+
if (!httpapi_namespaceObject.HttpApi.isHttpApi(api)) throw new TypeError('[BFF][Effect] Expected an HttpApi contract.');
|
|
42
|
+
httpapi_namespaceObject.HttpApi.reflect(api, {
|
|
43
|
+
onGroup: handlers.onGroup ?? (()=>{}),
|
|
44
|
+
onEndpoint: handlers.onEndpoint
|
|
45
|
+
});
|
|
46
|
+
}
|
|
54
47
|
});
|
|
55
|
-
return httpApiRuntimePromise;
|
|
56
48
|
}
|
|
57
49
|
function loadEffectApi(options) {
|
|
58
|
-
return getHttpApiRuntime().then((httpApiRuntime)=>(0,
|
|
50
|
+
return getHttpApiRuntime().then((httpApiRuntime)=>(0, external_loader_js_namespaceObject.loadEffectSourceModule)(options).then((mod)=>(0, effect_namespaceObject.extractHttpApiFromModule)(mod, httpApiRuntime.isHttpApi)));
|
|
59
51
|
}
|
|
60
52
|
exports.getHttpApiRuntime = __webpack_exports__.getHttpApiRuntime;
|
|
61
53
|
exports.loadEffectApi = __webpack_exports__.loadEffectApi;
|
|
@@ -28,23 +28,35 @@ var __webpack_require__ = {};
|
|
|
28
28
|
var __webpack_exports__ = {};
|
|
29
29
|
__webpack_require__.r(__webpack_exports__);
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
+
bundleBuiltEffectEntryForNode: ()=>external_built_entry_js_namespaceObject.bundleBuiltEffectEntryForNode,
|
|
31
32
|
bundleEffectEntryForNode: ()=>external_loader_js_namespaceObject.bundleEffectEntryForNode,
|
|
32
|
-
|
|
33
|
+
bundleEffectWorkerRuntimeSource: ()=>external_worker_runtime_source_js_namespaceObject.bundleEffectWorkerRuntimeSource,
|
|
33
34
|
generateEffectWorkerRuntimeWrapper: ()=>external_worker_runtime_wrapper_js_namespaceObject.generateEffectWorkerRuntimeWrapper,
|
|
34
|
-
resolveEffectEntryFile: ()=>
|
|
35
|
+
resolveEffectEntryFile: ()=>external_paths_js_namespaceObject.resolveEffectEntryFile,
|
|
36
|
+
resolveEffectEntryPaths: ()=>external_built_entry_js_namespaceObject.resolveEffectEntryPaths,
|
|
37
|
+
resolveEffectOperationContracts: ()=>external_operation_contracts_js_namespaceObject.resolveEffectOperationContracts
|
|
35
38
|
});
|
|
36
|
-
const
|
|
39
|
+
const external_built_entry_js_namespaceObject = require("./built-entry.js");
|
|
37
40
|
const external_loader_js_namespaceObject = require("./loader.js");
|
|
41
|
+
const external_operation_contracts_js_namespaceObject = require("./operation-contracts.js");
|
|
42
|
+
const external_paths_js_namespaceObject = require("./paths.js");
|
|
43
|
+
const external_worker_runtime_source_js_namespaceObject = require("./worker-runtime-source.js");
|
|
38
44
|
const external_worker_runtime_wrapper_js_namespaceObject = require("./worker-runtime-wrapper.js");
|
|
45
|
+
exports.bundleBuiltEffectEntryForNode = __webpack_exports__.bundleBuiltEffectEntryForNode;
|
|
39
46
|
exports.bundleEffectEntryForNode = __webpack_exports__.bundleEffectEntryForNode;
|
|
40
|
-
exports.
|
|
47
|
+
exports.bundleEffectWorkerRuntimeSource = __webpack_exports__.bundleEffectWorkerRuntimeSource;
|
|
41
48
|
exports.generateEffectWorkerRuntimeWrapper = __webpack_exports__.generateEffectWorkerRuntimeWrapper;
|
|
42
49
|
exports.resolveEffectEntryFile = __webpack_exports__.resolveEffectEntryFile;
|
|
50
|
+
exports.resolveEffectEntryPaths = __webpack_exports__.resolveEffectEntryPaths;
|
|
51
|
+
exports.resolveEffectOperationContracts = __webpack_exports__.resolveEffectOperationContracts;
|
|
43
52
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
53
|
+
"bundleBuiltEffectEntryForNode",
|
|
44
54
|
"bundleEffectEntryForNode",
|
|
45
|
-
"
|
|
55
|
+
"bundleEffectWorkerRuntimeSource",
|
|
46
56
|
"generateEffectWorkerRuntimeWrapper",
|
|
47
|
-
"resolveEffectEntryFile"
|
|
57
|
+
"resolveEffectEntryFile",
|
|
58
|
+
"resolveEffectEntryPaths",
|
|
59
|
+
"resolveEffectOperationContracts"
|
|
48
60
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
49
61
|
Object.defineProperty(exports, '__esModule', {
|
|
50
62
|
value: true
|
|
@@ -93,16 +93,18 @@ function preserveSourceModuleSemantics() {
|
|
|
93
93
|
name: 'modern-js-effect-source-semantics',
|
|
94
94
|
setup (buildApi) {
|
|
95
95
|
buildApi.onLoad({
|
|
96
|
-
filter: /\.[cm]?[jt]sx
|
|
96
|
+
filter: /\.[cm]?[jt]sx?$/,
|
|
97
|
+
namespace: 'file'
|
|
97
98
|
}, async (args)=>{
|
|
98
99
|
const loader = sourceLoader(args);
|
|
99
100
|
if (!loader) return;
|
|
100
101
|
const source = await external_node_fs_default().promises.readFile(args.path, 'utf8');
|
|
102
|
+
const canonicalSourcePath = await external_node_fs_default().promises.realpath(args.path);
|
|
101
103
|
const compiled = await (0, external_esbuild_namespaceObject.transform)(source, {
|
|
102
104
|
define: {
|
|
103
|
-
__dirname: JSON.stringify(external_node_path_default().dirname(
|
|
104
|
-
__filename: JSON.stringify(
|
|
105
|
-
'import.meta.url': JSON.stringify((0, external_node_url_namespaceObject.pathToFileURL)(
|
|
105
|
+
__dirname: JSON.stringify(external_node_path_default().dirname(canonicalSourcePath)),
|
|
106
|
+
__filename: JSON.stringify(canonicalSourcePath),
|
|
107
|
+
'import.meta.url': JSON.stringify((0, external_node_url_namespaceObject.pathToFileURL)(canonicalSourcePath).href)
|
|
106
108
|
},
|
|
107
109
|
jsx: 'automatic',
|
|
108
110
|
loader,
|
|
@@ -123,6 +125,7 @@ const nodeBuiltins = new Set([
|
|
|
123
125
|
...external_node_module_namespaceObject.builtinModules.map((name)=>`node:${name}`)
|
|
124
126
|
]);
|
|
125
127
|
const dependencyResolutionMarker = 'modern-js-effect-dependency-resolution';
|
|
128
|
+
const BFF_RUNTIME_PACKAGE = /^@modern-js\/(?:bff-effect|plugin-bff)(?:\/|$)/;
|
|
126
129
|
async function isEsmOnlyFile(filename) {
|
|
127
130
|
const extension = external_node_path_default().extname(filename).toLowerCase();
|
|
128
131
|
if ('.mjs' === extension || '.mts' === extension) return true;
|
|
@@ -145,13 +148,16 @@ function isBareSpecifier(specifier) {
|
|
|
145
148
|
return !specifier.startsWith('.') && !specifier.startsWith('/') && !external_node_path_default().isAbsolute(specifier);
|
|
146
149
|
}
|
|
147
150
|
function externalizeInstalledDependencies(options) {
|
|
148
|
-
const runtimeRequire = (0, external_node_module_namespaceObject.createRequire)(external_node_path_default().join(options.runtimeResolveDir, '__modern_effect_entry.cjs'));
|
|
149
151
|
return {
|
|
150
152
|
name: 'modern-js-effect-installed-dependencies',
|
|
151
153
|
setup (buildApi) {
|
|
152
154
|
buildApi.onResolve({
|
|
153
155
|
filter: /.*/
|
|
154
156
|
}, async (args)=>{
|
|
157
|
+
if (BFF_RUNTIME_PACKAGE.test(args.path)) return {
|
|
158
|
+
external: true,
|
|
159
|
+
path: args.path
|
|
160
|
+
};
|
|
155
161
|
if (!isBareSpecifier(args.path) || nodeBuiltins.has(args.path) || args.pluginData?.[dependencyResolutionMarker] === true) return nodeBuiltins.has(args.path) ? {
|
|
156
162
|
external: true,
|
|
157
163
|
path: args.path
|
|
@@ -175,7 +181,8 @@ function externalizeInstalledDependencies(options) {
|
|
|
175
181
|
path: args.path
|
|
176
182
|
};
|
|
177
183
|
const realPath = await external_node_fs_default().promises.realpath(resolution.path).catch(()=>resolution.path);
|
|
178
|
-
|
|
184
|
+
const loader = SOURCE_LOADERS.get(external_node_path_default().extname(realPath).toLowerCase());
|
|
185
|
+
if (realPath.includes(`${external_node_path_default().sep}node_modules${external_node_path_default().sep}`) && 'ts' !== loader && 'tsx' !== loader && 'jsx' !== loader) {
|
|
179
186
|
const runtimeResolution = await buildApi.resolve(args.path, {
|
|
180
187
|
importer: '',
|
|
181
188
|
kind: args.kind,
|
|
@@ -185,28 +192,10 @@ function externalizeInstalledDependencies(options) {
|
|
|
185
192
|
},
|
|
186
193
|
resolveDir: options.runtimeResolveDir
|
|
187
194
|
});
|
|
188
|
-
if (0 === runtimeResolution.errors.length && runtimeResolution.path) {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
requiredPath = runtimeRequire.resolve(args.path);
|
|
193
|
-
} catch {
|
|
194
|
-
requiredPath = runtimeResolution.path;
|
|
195
|
-
}
|
|
196
|
-
if (await isEsmOnlyFile(requiredPath)) return {
|
|
197
|
-
namespace: resolution.namespace,
|
|
198
|
-
path: resolution.path,
|
|
199
|
-
pluginData: resolution.pluginData,
|
|
200
|
-
sideEffects: resolution.sideEffects,
|
|
201
|
-
suffix: resolution.suffix,
|
|
202
|
-
warnings: resolution.warnings
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
return {
|
|
206
|
-
external: true,
|
|
207
|
-
path: args.path
|
|
208
|
-
};
|
|
209
|
-
}
|
|
195
|
+
if (0 === runtimeResolution.errors.length && runtimeResolution.path) return {
|
|
196
|
+
external: true,
|
|
197
|
+
path: args.path
|
|
198
|
+
};
|
|
210
199
|
}
|
|
211
200
|
return {
|
|
212
201
|
namespace: resolution.namespace,
|
|
@@ -234,7 +223,6 @@ async function bundleEffectEntryForNode(options) {
|
|
|
234
223
|
platform: 'node',
|
|
235
224
|
plugins: [
|
|
236
225
|
externalizeInstalledDependencies({
|
|
237
|
-
format: options.format,
|
|
238
226
|
runtimeResolveDir: options.appDir
|
|
239
227
|
}),
|
|
240
228
|
preserveSourceModuleSemantics()
|
|
@@ -308,7 +296,6 @@ async function loadEffectSourceModule(options) {
|
|
|
308
296
|
platform: 'node',
|
|
309
297
|
plugins: [
|
|
310
298
|
externalizeInstalledDependencies({
|
|
311
|
-
format: 'esm',
|
|
312
299
|
runtimeResolveDir: appDir
|
|
313
300
|
}),
|
|
314
301
|
preserveSourceModuleSemantics()
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
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");
|
|
13
|
+
};
|
|
14
|
+
})();
|
|
15
|
+
(()=>{
|
|
16
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
17
|
+
})();
|
|
18
|
+
(()=>{
|
|
19
|
+
__webpack_require__.r = (exports1)=>{
|
|
20
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
21
|
+
value: 'Module'
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
24
|
+
value: true
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
})();
|
|
28
|
+
var __webpack_exports__ = {};
|
|
29
|
+
__webpack_require__.r(__webpack_exports__);
|
|
30
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
+
resolveEffectOperationContracts: ()=>resolveEffectOperationContracts
|
|
32
|
+
});
|
|
33
|
+
const effect_namespaceObject = require("@modern-js/bff-effect/effect");
|
|
34
|
+
const node_namespaceObject = require("@modern-js/server-runtime-extensions/bff-policy/node");
|
|
35
|
+
const utils_namespaceObject = require("@modern-js/utils");
|
|
36
|
+
const external_http_api_runtime_js_namespaceObject = require("./http-api-runtime.js");
|
|
37
|
+
async function resolveEffectOperationContracts(options) {
|
|
38
|
+
const api = await (0, external_http_api_runtime_js_namespaceObject.loadEffectApi)(options);
|
|
39
|
+
if (null === api) return null;
|
|
40
|
+
const runtime = await (0, external_http_api_runtime_js_namespaceObject.getHttpApiRuntime)();
|
|
41
|
+
const endpoints = (0, effect_namespaceObject.collectEffectEndpoints)(runtime.reflect, api, options.prefix);
|
|
42
|
+
return (0, node_namespaceObject.buildOperationContractMap)({
|
|
43
|
+
handlers: (0, effect_namespaceObject.toOperationContractSources)(endpoints),
|
|
44
|
+
...(0, node_namespaceObject.resolveOperationProducer)({
|
|
45
|
+
directories: [
|
|
46
|
+
utils_namespaceObject.upath.dirname(options.resourcePath),
|
|
47
|
+
options.appDir
|
|
48
|
+
],
|
|
49
|
+
requestId: options.requestId,
|
|
50
|
+
onDependency: options.onDependency
|
|
51
|
+
})
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
exports.resolveEffectOperationContracts = __webpack_exports__.resolveEffectOperationContracts;
|
|
55
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
56
|
+
"resolveEffectOperationContracts"
|
|
57
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
58
|
+
Object.defineProperty(exports, '__esModule', {
|
|
59
|
+
value: true
|
|
60
|
+
});
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
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");
|
|
13
|
+
};
|
|
14
|
+
})();
|
|
15
|
+
(()=>{
|
|
16
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
17
|
+
})();
|
|
18
|
+
(()=>{
|
|
19
|
+
__webpack_require__.r = (exports1)=>{
|
|
20
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
21
|
+
value: 'Module'
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
24
|
+
value: true
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
})();
|
|
28
|
+
var __webpack_exports__ = {};
|
|
29
|
+
__webpack_require__.r(__webpack_exports__);
|
|
30
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
+
emittedEffectEntry: ()=>emittedEffectEntry,
|
|
32
|
+
relativeEffectAppPath: ()=>relativeEffectAppPath,
|
|
33
|
+
resolveEffectEntry: ()=>resolveEffectEntry,
|
|
34
|
+
resolveEffectEntryFile: ()=>resolveEffectEntryFile
|
|
35
|
+
});
|
|
36
|
+
const utils_namespaceObject = require("@modern-js/utils");
|
|
37
|
+
const JS_OR_TS_EXTS = [
|
|
38
|
+
'.js',
|
|
39
|
+
'.jsx',
|
|
40
|
+
'.ts',
|
|
41
|
+
'.tsx',
|
|
42
|
+
'.mjs',
|
|
43
|
+
'.mts',
|
|
44
|
+
'.cjs',
|
|
45
|
+
'.cts'
|
|
46
|
+
];
|
|
47
|
+
const emittedEffectEntry = (entry)=>entry.replace(/\.(?:[cm]?ts|tsx|jsx)$/u, '.js');
|
|
48
|
+
function relativeEffectAppPath(appDir, entry) {
|
|
49
|
+
const relative = utils_namespaceObject.upath.relative(appDir, entry);
|
|
50
|
+
return '..' === relative || relative.startsWith('../') || relative.split('/').includes('node_modules') ? void 0 : relative;
|
|
51
|
+
}
|
|
52
|
+
function existingEntry(entry) {
|
|
53
|
+
return utils_namespaceObject.upath.extname(entry) ? utils_namespaceObject.fs.existsSync(entry) ? entry : void 0 : (0, utils_namespaceObject.findExists)(JS_OR_TS_EXTS.map((ext)=>`${entry}${ext}`)) || void 0;
|
|
54
|
+
}
|
|
55
|
+
function resolveEffectEntry(options) {
|
|
56
|
+
const { appDir, apiDir, effectEntry, distDir } = options;
|
|
57
|
+
const entry = utils_namespaceObject.upath.resolve(appDir, effectEntry || utils_namespaceObject.upath.join(apiDir, 'index'));
|
|
58
|
+
if (distDir && void 0 !== relativeEffectAppPath(distDir, entry)) return {
|
|
59
|
+
kind: 'built-output',
|
|
60
|
+
path: existingEntry(emittedEffectEntry(entry))
|
|
61
|
+
};
|
|
62
|
+
const relative = relativeEffectAppPath(appDir, entry);
|
|
63
|
+
if (void 0 === relative) return {
|
|
64
|
+
kind: 'external-sdk',
|
|
65
|
+
path: existingEntry(entry)
|
|
66
|
+
};
|
|
67
|
+
return distDir ? {
|
|
68
|
+
kind: 'built-output',
|
|
69
|
+
path: existingEntry(emittedEffectEntry(utils_namespaceObject.upath.resolve(distDir, relative)))
|
|
70
|
+
} : {
|
|
71
|
+
kind: 'app-source',
|
|
72
|
+
path: existingEntry(entry)
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function resolveEffectEntryFile(options) {
|
|
76
|
+
return resolveEffectEntry(options).path;
|
|
77
|
+
}
|
|
78
|
+
exports.emittedEffectEntry = __webpack_exports__.emittedEffectEntry;
|
|
79
|
+
exports.relativeEffectAppPath = __webpack_exports__.relativeEffectAppPath;
|
|
80
|
+
exports.resolveEffectEntry = __webpack_exports__.resolveEffectEntry;
|
|
81
|
+
exports.resolveEffectEntryFile = __webpack_exports__.resolveEffectEntryFile;
|
|
82
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
83
|
+
"emittedEffectEntry",
|
|
84
|
+
"relativeEffectAppPath",
|
|
85
|
+
"resolveEffectEntry",
|
|
86
|
+
"resolveEffectEntryFile"
|
|
87
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
88
|
+
Object.defineProperty(exports, '__esModule', {
|
|
89
|
+
value: true
|
|
90
|
+
});
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
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");
|
|
13
|
+
};
|
|
14
|
+
})();
|
|
15
|
+
(()=>{
|
|
16
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
17
|
+
})();
|
|
18
|
+
(()=>{
|
|
19
|
+
__webpack_require__.r = (exports1)=>{
|
|
20
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
21
|
+
value: 'Module'
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
24
|
+
value: true
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
})();
|
|
28
|
+
var __webpack_exports__ = {};
|
|
29
|
+
__webpack_require__.r(__webpack_exports__);
|
|
30
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
+
default: ()=>loader
|
|
32
|
+
});
|
|
33
|
+
const external_node_fs_namespaceObject = require("node:fs");
|
|
34
|
+
const external_index_js_namespaceObject = require("./index.js");
|
|
35
|
+
async function loader(source) {
|
|
36
|
+
this.cacheable();
|
|
37
|
+
delete require.cache[this.resourcePath];
|
|
38
|
+
const callback = this.async();
|
|
39
|
+
try {
|
|
40
|
+
const options = this.getOptions();
|
|
41
|
+
const entry = (0, external_index_js_namespaceObject.resolveEffectEntryFile)(options);
|
|
42
|
+
if (!entry || (0, external_node_fs_namespaceObject.realpathSync)(entry) !== (0, external_node_fs_namespaceObject.realpathSync)(this.resourcePath)) throw new Error(`Unexpected Effect BFF loader resource: ${this.resourcePath}`);
|
|
43
|
+
const query = new URLSearchParams(this.resourceQuery);
|
|
44
|
+
if (query.has('modern-bff-runtime-source')) {
|
|
45
|
+
const { transform } = await import("@swc/core");
|
|
46
|
+
const transformed = await transform(source, {
|
|
47
|
+
filename: this.resourcePath,
|
|
48
|
+
sourceMaps: false,
|
|
49
|
+
jsc: {
|
|
50
|
+
parser: {
|
|
51
|
+
syntax: "typescript",
|
|
52
|
+
tsx: /\.[jt]sx$/.test(this.resourcePath)
|
|
53
|
+
},
|
|
54
|
+
target: 'es2024'
|
|
55
|
+
},
|
|
56
|
+
module: {
|
|
57
|
+
type: 'es6'
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
callback(void 0, await (0, external_index_js_namespaceObject.bundleEffectWorkerRuntimeSource)(transformed.code, this.resourcePath, this));
|
|
61
|
+
} else if (query.has('modern-bff-runtime')) callback(void 0, await (0, external_index_js_namespaceObject.generateEffectWorkerRuntimeWrapper)(this, options, this.resourcePath));
|
|
62
|
+
else throw new Error('Effect BFF entries are server-only. Import the shared HttpApi contract and use HttpApiClient.make (or makeEffectHttpApiClient) for a fully inferred client.');
|
|
63
|
+
} catch (error) {
|
|
64
|
+
callback(error instanceof Error ? error : new Error(String(error)));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports["default"] = __webpack_exports__["default"];
|
|
68
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
69
|
+
"default"
|
|
70
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
71
|
+
Object.defineProperty(exports, '__esModule', {
|
|
72
|
+
value: true
|
|
73
|
+
});
|