@bleedingdev/modern-js-plugin-bff-extensions 3.9.0-ultramodern.5 → 3.9.0-ultramodern.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/README.md +6 -3
  2. package/dist/cjs/backend-federation/edge-runtime.js +3 -15
  3. package/dist/cjs/backend-federation/edge.js +2 -3
  4. package/dist/cjs/backend-federation/identity.js +17 -23
  5. package/dist/cjs/backend-federation/load.js +1 -11
  6. package/dist/cjs/backend-federation/validate-loaded.js +2 -4
  7. package/dist/cjs/backend-federation-manifest/load.js +9 -7
  8. package/dist/cjs/backend-federation-manifest/validation.js +4 -4
  9. package/dist/cjs/{client-generator → effect-source-loader}/built-entry.js +1 -1
  10. package/dist/cjs/{client-generator/runtime.js → effect-source-loader/http-api-runtime.js} +12 -20
  11. package/dist/cjs/effect-source-loader/index.js +14 -6
  12. package/dist/cjs/effect-source-loader/operation-contracts.js +83 -0
  13. package/dist/cjs/effect-source-loader/rspack-loader.js +1 -17
  14. package/dist/cjs/effect-source-loader/worker-runtime-wrapper.js +6 -21
  15. package/dist/esm/backend-federation/edge-runtime.mjs +2 -11
  16. package/dist/esm/backend-federation/edge.mjs +3 -4
  17. package/dist/esm/backend-federation/identity.mjs +17 -23
  18. package/dist/esm/backend-federation/load.mjs +1 -11
  19. package/dist/esm/backend-federation/validate-loaded.mjs +2 -4
  20. package/dist/esm/backend-federation-manifest/load.mjs +9 -7
  21. package/dist/esm/backend-federation-manifest/validation.mjs +4 -4
  22. package/dist/esm/{client-generator → effect-source-loader}/built-entry.mjs +1 -1
  23. package/dist/esm/effect-source-loader/http-api-runtime.mjs +19 -0
  24. package/dist/esm/effect-source-loader/index.mjs +4 -2
  25. package/dist/esm/effect-source-loader/operation-contracts.mjs +45 -0
  26. package/dist/esm/effect-source-loader/rspack-loader.mjs +2 -18
  27. package/dist/esm/effect-source-loader/worker-runtime-wrapper.mjs +4 -16
  28. package/dist/esm-node/backend-federation/edge-runtime.mjs +2 -11
  29. package/dist/esm-node/backend-federation/edge.mjs +3 -4
  30. package/dist/esm-node/backend-federation/identity.mjs +17 -23
  31. package/dist/esm-node/backend-federation/load.mjs +1 -11
  32. package/dist/esm-node/backend-federation/validate-loaded.mjs +2 -4
  33. package/dist/esm-node/backend-federation-manifest/load.mjs +9 -7
  34. package/dist/esm-node/backend-federation-manifest/validation.mjs +4 -4
  35. package/dist/esm-node/{client-generator → effect-source-loader}/built-entry.mjs +1 -1
  36. package/dist/esm-node/effect-source-loader/http-api-runtime.mjs +20 -0
  37. package/dist/esm-node/effect-source-loader/index.mjs +4 -2
  38. package/dist/esm-node/effect-source-loader/operation-contracts.mjs +46 -0
  39. package/dist/esm-node/effect-source-loader/rspack-loader.mjs +2 -18
  40. package/dist/esm-node/effect-source-loader/worker-runtime-wrapper.mjs +4 -16
  41. package/dist/types/backend-federation/edge-runtime.d.ts +0 -5
  42. package/dist/types/backend-federation/edge.d.ts +0 -2
  43. package/dist/types/backend-federation/identity.d.ts +2 -11
  44. package/dist/types/backend-federation/load.d.ts +1 -7
  45. package/dist/types/backend-federation/node.d.ts +1 -3
  46. package/dist/types/backend-federation/types.d.ts +0 -6
  47. package/dist/types/backend-federation/validate-loaded.d.ts +1 -2
  48. package/dist/types/backend-federation-manifest/metadata.d.ts +0 -6
  49. package/dist/types/effect-source-loader/index.d.ts +4 -2
  50. package/dist/types/effect-source-loader/operation-contracts.d.ts +8 -0
  51. package/dist/types/effect-source-loader/rspack-loader.d.ts +0 -14
  52. package/dist/types/effect-source-loader/worker-runtime-wrapper.d.ts +4 -22
  53. package/package.json +10 -22
  54. package/src/backend-federation/edge-runtime.ts +2 -13
  55. package/src/backend-federation/edge.ts +8 -16
  56. package/src/backend-federation/identity.ts +9 -27
  57. package/src/backend-federation/load.ts +6 -33
  58. package/src/backend-federation/node.ts +0 -11
  59. package/src/backend-federation/types.ts +0 -6
  60. package/src/backend-federation/validate-loaded.ts +2 -7
  61. package/src/backend-federation-manifest/load.ts +20 -14
  62. package/src/backend-federation-manifest/metadata.ts +0 -6
  63. package/src/backend-federation-manifest/validation.ts +9 -12
  64. package/src/{client-generator → effect-source-loader}/built-entry.ts +1 -3
  65. package/src/effect-source-loader/http-api-runtime.ts +39 -0
  66. package/src/effect-source-loader/index.ts +7 -5
  67. package/src/effect-source-loader/operation-contracts.ts +72 -0
  68. package/src/effect-source-loader/rspack-loader.ts +3 -33
  69. package/src/effect-source-loader/worker-runtime-wrapper.ts +4 -46
  70. package/dist/cjs/backend-federation/legacy-warning.js +0 -40
  71. package/dist/cjs/client-generator/generator.js +0 -73
  72. package/dist/cjs/client-generator/index.js +0 -54
  73. package/dist/cjs/client-generator/rendering.js +0 -253
  74. package/dist/cjs/client-generator/types.js +0 -18
  75. package/dist/esm/backend-federation/legacy-warning.mjs +0 -2
  76. package/dist/esm/client-generator/generator.mjs +0 -32
  77. package/dist/esm/client-generator/index.mjs +0 -3
  78. package/dist/esm/client-generator/rendering.mjs +0 -209
  79. package/dist/esm/client-generator/runtime.mjs +0 -27
  80. package/dist/esm/client-generator/types.mjs +0 -0
  81. package/dist/esm-node/backend-federation/legacy-warning.mjs +0 -3
  82. package/dist/esm-node/client-generator/generator.mjs +0 -33
  83. package/dist/esm-node/client-generator/index.mjs +0 -4
  84. package/dist/esm-node/client-generator/rendering.mjs +0 -210
  85. package/dist/esm-node/client-generator/runtime.mjs +0 -29
  86. package/dist/esm-node/client-generator/types.mjs +0 -1
  87. package/dist/types/backend-federation/legacy-warning.d.ts +0 -1
  88. package/dist/types/client-generator/generator.d.ts +0 -3
  89. package/dist/types/client-generator/index.d.ts +0 -4
  90. package/dist/types/client-generator/rendering.d.ts +0 -24
  91. package/dist/types/client-generator/types.d.ts +0 -33
  92. package/src/backend-federation/legacy-warning.ts +0 -2
  93. package/src/client-generator/generator.ts +0 -52
  94. package/src/client-generator/index.ts +0 -10
  95. package/src/client-generator/rendering.ts +0 -307
  96. package/src/client-generator/runtime.ts +0 -69
  97. package/src/client-generator/types.ts +0 -35
  98. /package/dist/cjs/{client-generator → effect-source-loader}/paths.js +0 -0
  99. /package/dist/esm/{client-generator → effect-source-loader}/paths.mjs +0 -0
  100. /package/dist/esm-node/{client-generator → effect-source-loader}/paths.mjs +0 -0
  101. /package/dist/types/{client-generator → effect-source-loader}/built-entry.d.ts +0 -0
  102. /package/dist/types/{client-generator/runtime.d.ts → effect-source-loader/http-api-runtime.d.ts} +0 -0
  103. /package/dist/types/{client-generator → effect-source-loader}/paths.d.ts +0 -0
  104. /package/src/{client-generator → effect-source-loader}/paths.ts +0 -0
@@ -9,8 +9,7 @@ import { isRecord } from './utils';
9
9
  export function validateLoadedBackendFederatedEffectApi(
10
10
  loaded: unknown,
11
11
  options: {
12
- allowMissingIdentityMetadata?: boolean;
13
- expected?: BackendFederationExpectedIdentity;
12
+ expected: BackendFederationExpectedIdentity;
14
13
  remoteName: string;
15
14
  remoteRequest: string;
16
15
  },
@@ -52,14 +51,10 @@ export function validateLoadedBackendFederatedEffectApi(
52
51
  );
53
52
  }
54
53
 
55
- if (options.expected !== undefined) {
54
+ {
56
55
  const issues = validateExpectedBackendFederationIdentity(
57
56
  loaded,
58
57
  options.expected,
59
- {
60
- allowMissingIdentityMetadata:
61
- options.allowMissingIdentityMetadata === true,
62
- },
63
58
  );
64
59
  if (issues.length > 0) {
65
60
  throw new Error(
@@ -7,6 +7,12 @@ import {
7
7
  } from '../backend-federation';
8
8
  import { loadBackendFederatedEffectApi } from '../backend-federation/load';
9
9
  import { BackendFederationManifestAdapterError } from './errors';
10
+ import {
11
+ backendFederationMetadata,
12
+ manifestDeliveryUnit,
13
+ stringValue,
14
+ versionBoundaryMetadata,
15
+ } from './metadata';
10
16
  import { loadBackendFederationManifest } from './reference';
11
17
  import { resolveBackendFederationRemoteFromManifest } from './remote';
12
18
  import type {
@@ -204,6 +210,19 @@ export async function loadBackendFederatedEffectApiFromManifest(
204
210
  );
205
211
  }
206
212
 
213
+ const deliveryUnit = manifestDeliveryUnit(
214
+ backendFederationMetadata(manifest),
215
+ versionBoundaryMetadata(manifest),
216
+ );
217
+ const unitId =
218
+ stringValue(deliveryUnit.boundary?.unitId) ??
219
+ stringValue(deliveryUnit.top?.unitId);
220
+ const buildMarker = stringValue(deliveryUnit.boundary?.buildMarker);
221
+ if (!unitId || !buildMarker)
222
+ throw new BackendFederationManifestAdapterError(
223
+ 'manifest_invalid',
224
+ 'Backend federation manifest requires delivery-unit identity.',
225
+ );
207
226
  const loaded = await loadBackendFederatedEffectApi({
208
227
  hostName: options.hostName,
209
228
  remote,
@@ -214,20 +233,7 @@ export async function loadBackendFederatedEffectApiFromManifest(
214
233
  timeoutMs: 0,
215
234
  },
216
235
  ...(options.runtime ? { runtime: options.runtime } : {}),
217
- // MV-G23: route the manifest adapter through the raw loader's shared
218
- // delivery-unit identity validation when an identity is expected.
219
- ...(options.expected?.unitId && options.expected.buildMarker
220
- ? {
221
- expected: {
222
- unitId: options.expected.unitId,
223
- buildMarker: options.expected.buildMarker,
224
- },
225
- // The manifest's identity is already validated against
226
- // `expected`; legacy exposes without identity metadata stay
227
- // loadable (mismatching declared values still fail).
228
- allowMissingIdentityMetadata: true,
229
- }
230
- : {}),
236
+ expected: { unitId, buildMarker },
231
237
  }).catch((error: unknown) => {
232
238
  throw new BackendFederationManifestAdapterError(
233
239
  scope?.timedOut() === true ? 'timeout' : classifyLoadError(error),
@@ -56,12 +56,6 @@ export function deliveryUnitMetadata(
56
56
  return recordField(record, 'deliveryUnit');
57
57
  }
58
58
 
59
- /**
60
- * Resolves the delivery-unit identity root for a manifest (ADR-0019 §3):
61
- * prefers `versionBoundary.deliveryUnit`, falls back to the top-level
62
- * `backendFederation.deliveryUnit` record. Both are additive/optional so
63
- * legacy manifests without delivery-unit metadata continue to validate.
64
- */
65
59
  export function manifestDeliveryUnit(
66
60
  backendFederation: Record<string, unknown> | undefined,
67
61
  boundary: Record<string, unknown> | undefined,
@@ -48,11 +48,6 @@ function resolveExpectedBuildMarker(
48
48
  );
49
49
  }
50
50
 
51
- // Intentionally no fallback to `buildVersion` here: this is only used to
52
- // compare against manifest `deliveryUnit.buildMarker`, which is a
53
- // separate, additive field. Callers that only pass `buildVersion` (the
54
- // pre-ADR-0019 expectation shape) must not be forced to also match a
55
- // delivery-unit build marker on the manifest.
56
51
  return expected.buildMarker;
57
52
  }
58
53
 
@@ -70,7 +65,6 @@ export function validateBackendFederationManifest(
70
65
  const manifestShape = validateBackendFederationManifestContract(manifest, {
71
66
  expectedContractVersion: false,
72
67
  expectedNodeAdapterVersion: false,
73
- validateDeliveryUnit: false,
74
68
  });
75
69
  assertManifestAdapter(
76
70
  manifestShape.ok,
@@ -151,6 +145,11 @@ export function validateBackendFederationManifest(
151
145
  const manifestUnitId =
152
146
  stringValue(deliveryUnit.boundary?.unitId) ??
153
147
  stringValue(deliveryUnit.top?.unitId);
148
+ assertManifestAdapter(
149
+ manifestUnitId && stringValue(deliveryUnit.boundary?.buildMarker),
150
+ 'manifest_invalid',
151
+ 'Backend federation manifest requires delivery-unit unitId and buildMarker.',
152
+ );
154
153
  assertVersionValue(manifestUnitId, expected.unitId, 'deliveryUnit.unitId');
155
154
  assertVersionValue(
156
155
  stringValue(deliveryUnit.boundary?.buildMarker),
@@ -214,16 +213,14 @@ export function validateLoadedBackendFederationContract(
214
213
  stringValue(deliveryUnit.top?.unitId);
215
214
  const manifestBuildMarker = stringValue(deliveryUnit.boundary?.buildMarker);
216
215
 
217
- // Only enforced when both sides declare the field: absence on either side
218
- // is a legacy manifest/expose and must stay backward compatible.
219
- assertConsistentValue(
220
- manifestUnitId,
216
+ assertVersionValue(
221
217
  stringValue(compatibility.unitId),
218
+ manifestUnitId,
222
219
  'deliveryUnit.unitId vs expose compatibility.unitId',
223
220
  );
224
- assertConsistentValue(
225
- manifestBuildMarker,
221
+ assertVersionValue(
226
222
  stringValue(compatibility.build),
223
+ manifestBuildMarker,
227
224
  'deliveryUnit.buildMarker vs expose compatibility.build',
228
225
  );
229
226
  }
@@ -41,9 +41,7 @@ export async function bundleBuiltEffectEntryForNode(options: {
41
41
  }`,
42
42
  );
43
43
  }
44
- const { bundleEffectEntryForNode } = await import(
45
- '../effect-source-loader/loader'
46
- );
44
+ const { bundleEffectEntryForNode } = await import('./loader');
47
45
  return bundleEffectEntryForNode({
48
46
  appDir,
49
47
  entryPath: builtEntry,
@@ -0,0 +1,39 @@
1
+ import {
2
+ extractHttpApiFromModule,
3
+ type HttpApiLike,
4
+ type HttpApiReflect,
5
+ } from '@modern-js/bff-effect/effect';
6
+ import { HttpApi } from 'effect/unstable/httpapi';
7
+ import { loadEffectSourceModule } from './loader';
8
+
9
+ type HttpApiRuntime = {
10
+ isHttpApi: (value: unknown) => boolean;
11
+ reflect: HttpApiReflect;
12
+ };
13
+
14
+ export function getHttpApiRuntime(): Promise<HttpApiRuntime> {
15
+ return Promise.resolve({
16
+ isHttpApi: HttpApi.isHttpApi,
17
+ reflect: (api, handlers) => {
18
+ if (!HttpApi.isHttpApi(api)) {
19
+ throw new TypeError('[BFF][Effect] Expected an HttpApi contract.');
20
+ }
21
+ HttpApi.reflect(api, {
22
+ onGroup: handlers.onGroup ?? (() => {}),
23
+ onEndpoint: handlers.onEndpoint,
24
+ });
25
+ },
26
+ });
27
+ }
28
+
29
+ export function loadEffectApi(options: {
30
+ appDir: string;
31
+ resourcePath: string;
32
+ onDependency?: (dependency: string) => void;
33
+ }): Promise<HttpApiLike | null> {
34
+ return getHttpApiRuntime().then(httpApiRuntime =>
35
+ loadEffectSourceModule(options).then(mod =>
36
+ extractHttpApiFromModule(mod, httpApiRuntime.isHttpApi),
37
+ ),
38
+ );
39
+ }
@@ -1,7 +1,9 @@
1
- export { resolveEffectEntryFile } from '../client-generator/paths';
1
+ export {
2
+ bundleBuiltEffectEntryForNode,
3
+ resolveEffectEntryPaths,
4
+ } from './built-entry';
2
5
  export { bundleEffectEntryForNode } from './loader';
6
+ export { resolveEffectOperationContracts } from './operation-contracts';
7
+ export { resolveEffectEntryFile } from './paths';
3
8
  export { bundleEffectWorkerRuntimeSource } from './worker-runtime-source';
4
- export {
5
- generateEffectClientCode,
6
- generateEffectWorkerRuntimeWrapper,
7
- } from './worker-runtime-wrapper';
9
+ export { generateEffectWorkerRuntimeWrapper } from './worker-runtime-wrapper';
@@ -0,0 +1,72 @@
1
+ import {
2
+ collectEffectEndpoints,
3
+ toOperationContractSources,
4
+ } from '@modern-js/bff-effect/effect';
5
+ import {
6
+ buildOperationContractMap,
7
+ deriveOperationVersion,
8
+ } from '@modern-js/server-runtime-extensions/bff-policy/node';
9
+ import { fs, upath as path } from '@modern-js/utils';
10
+ import { getHttpApiRuntime, loadEffectApi } from './http-api-runtime';
11
+
12
+ function getPackageInfo(
13
+ resourcePath: string,
14
+ appDir: string,
15
+ onDependency?: (dependency: string) => void,
16
+ ): { name?: string; version?: string } {
17
+ for (const startDir of [path.dirname(resourcePath), appDir]) {
18
+ let current = path.resolve(startDir);
19
+ for (let depth = 0; depth < 32; depth += 1) {
20
+ const packageJsonPath = path.join(current, 'package.json');
21
+ if (fs.existsSync(packageJsonPath)) {
22
+ onDependency?.(packageJsonPath);
23
+ try {
24
+ const packageJson = fs.readJSONSync(packageJsonPath) as {
25
+ name?: string;
26
+ version?: string;
27
+ };
28
+ return { name: packageJson.name, version: packageJson.version };
29
+ } catch {
30
+ return {};
31
+ }
32
+ }
33
+ const parent = path.dirname(current);
34
+ if (parent === current) {
35
+ break;
36
+ }
37
+ current = parent;
38
+ }
39
+ }
40
+ return {};
41
+ }
42
+
43
+ /** Derives server policy metadata without emitting or typing a client. */
44
+ export async function resolveEffectOperationContracts(options: {
45
+ appDir: string;
46
+ resourcePath: string;
47
+ prefix: string;
48
+ requestId?: string;
49
+ onDependency?: (dependency: string) => void;
50
+ }) {
51
+ const api = await loadEffectApi(options);
52
+ if (api === null) {
53
+ return null;
54
+ }
55
+ const runtime = await getHttpApiRuntime();
56
+ const endpoints = collectEffectEndpoints(
57
+ runtime.reflect,
58
+ api,
59
+ options.prefix,
60
+ );
61
+ const packageInfo = getPackageInfo(
62
+ options.resourcePath,
63
+ options.appDir,
64
+ options.onDependency,
65
+ );
66
+ const requestId = options.requestId?.trim() || packageInfo.name || 'default';
67
+ return buildOperationContractMap({
68
+ handlers: toOperationContractSources(endpoints),
69
+ requestId,
70
+ operationVersion: deriveOperationVersion(packageInfo.version),
71
+ });
72
+ }
@@ -1,10 +1,8 @@
1
1
  import { realpathSync } from 'node:fs';
2
2
  import path from 'node:path';
3
- import type { HttpMethodDecider } from '@modern-js/types';
4
3
  import type { Rspack } from '@rsbuild/core';
5
4
  import {
6
5
  bundleEffectWorkerRuntimeSource,
7
- generateEffectClientCode,
8
6
  generateEffectWorkerRuntimeWrapper,
9
7
  resolveEffectEntryFile,
10
8
  } from './index';
@@ -14,20 +12,7 @@ export interface EffectBffLoaderOptions {
14
12
  appDir: string;
15
13
  apiDir: string;
16
14
  effectEntry: string;
17
- port: number;
18
- target: string;
19
- requestCreator?: string;
20
15
  requestId?: string;
21
- httpMethodDecider?: HttpMethodDecider;
22
- effectDataPlatformBatch?: {
23
- enabled?: boolean;
24
- endpoint?: string;
25
- flushIntervalMs?: number;
26
- maxBatchSize?: number;
27
- maxBatchBytes?: number;
28
- requestTimeoutMs?: number;
29
- allowedMethods?: string[];
30
- };
31
16
  }
32
17
 
33
18
  export default async function loader(
@@ -77,24 +62,9 @@ export default async function loader(
77
62
  ),
78
63
  );
79
64
  } else {
80
- const code = await generateEffectClientCode({
81
- appDir: options.appDir,
82
- apiDir: options.apiDir,
83
- resourcePath: this.resourcePath,
84
- prefix: options.prefix,
85
- port: Number(options.port),
86
- target: options.target,
87
- requestId: options.requestId,
88
- requestCreator: options.requestCreator,
89
- httpMethodDecider: options.httpMethodDecider,
90
- dataPlatformBatch: options.effectDataPlatformBatch,
91
- onDependency: dependency => this.addDependency(dependency),
92
- });
93
- if (code === null)
94
- throw new Error(
95
- `Failed to generate Effect client for ${this.resourcePath}`,
96
- );
97
- callback(undefined, code);
65
+ throw new Error(
66
+ 'Effect BFF entries are server-only. Import the shared HttpApi contract and use HttpApiClient.make (or makeEffectHttpApiClient) for a fully inferred client.',
67
+ );
98
68
  }
99
69
  } catch (error) {
100
70
  callback(error instanceof Error ? error : new Error(String(error)));
@@ -1,62 +1,20 @@
1
- // @effect-diagnostics asyncFunction:off strictBooleanExpressions:off
2
- import type { HttpMethodDecider } from '@modern-js/types';
3
- import type { EffectClientCodegenOptions } from '../client-generator/types';
4
-
5
- type EffectWorkerRuntimeGenerationOptions = {
6
- apiDir: string;
7
- appDir: string;
8
- effectDataPlatformBatch?: {
9
- allowedMethods?: string[];
10
- enabled?: boolean;
11
- endpoint?: string;
12
- flushIntervalMs?: number;
13
- maxBatchBytes?: number;
14
- maxBatchSize?: number;
15
- requestTimeoutMs?: number;
16
- };
17
- httpMethodDecider?: HttpMethodDecider;
18
- port: number;
19
- prefix: string;
20
- requestCreator?: string;
21
- requestId?: string;
22
- };
1
+ import { resolveEffectOperationContracts } from './operation-contracts';
23
2
 
24
3
  export async function generateEffectWorkerRuntimeWrapper(
25
4
  loader: { addDependency: (dependency: string) => void },
26
- options: EffectWorkerRuntimeGenerationOptions,
5
+ options: { appDir: string; prefix: string; requestId?: string },
27
6
  resourcePath: string,
28
7
  ) {
29
- const { generateEffectClient } = await import(
30
- '../client-generator/generator'
31
- );
32
- const artifacts = await generateEffectClient({
8
+ const operationContracts = await resolveEffectOperationContracts({
33
9
  appDir: options.appDir,
34
- apiDir: options.apiDir,
35
10
  resourcePath,
36
11
  prefix: options.prefix,
37
- port: Number(options.port),
38
- target: 'bundle',
39
12
  requestId: options.requestId,
40
- requestCreator: options.requestCreator,
41
- httpMethodDecider: options.httpMethodDecider,
42
- dataPlatformBatch: options.effectDataPlatformBatch,
43
13
  onDependency: dependency => loader.addDependency(dependency),
44
14
  });
45
15
  const sourceRequest = `${resourcePath}?modern-bff-runtime-source`;
46
- const operationContracts = artifacts?.operationContracts ?? {};
47
-
48
16
  return `import * as effectBffModule from ${JSON.stringify(sourceRequest)};
49
17
  import { createEffectBffEdgeDispatcherFactory } from '@modern-js/bff-effect/effect-edge';
50
- export const __modern_create_effect_bff_dispatcher = createEffectBffEdgeDispatcherFactory(effectBffModule, ${JSON.stringify(operationContracts)});
18
+ export const __modern_create_effect_bff_dispatcher = createEffectBffEdgeDispatcherFactory(effectBffModule, ${JSON.stringify(operationContracts ?? {})});
51
19
  `;
52
20
  }
53
-
54
- export async function generateEffectClientCode(
55
- options: EffectClientCodegenOptions,
56
- ) {
57
- const { generateEffectClient } = await import(
58
- '../client-generator/generator'
59
- );
60
- const artifacts = await generateEffectClient(options);
61
- return artifacts === null ? null : artifacts.code;
62
- }
@@ -1,40 +0,0 @@
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
- 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.';
31
- __webpack_require__.d(__webpack_exports__, {}, {
32
- LEGACY_LOAD_WARNING: LEGACY_LOAD_WARNING
33
- });
34
- exports.LEGACY_LOAD_WARNING = __webpack_exports__.LEGACY_LOAD_WARNING;
35
- for(var __rspack_i in __webpack_exports__)if (-1 === [
36
- "LEGACY_LOAD_WARNING"
37
- ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
38
- Object.defineProperty(exports, '__esModule', {
39
- value: true
40
- });
@@ -1,73 +0,0 @@
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
- generateEffectClient: ()=>generateEffectClient,
32
- generateEffectClientCode: ()=>generateEffectClientCode
33
- });
34
- const effect_namespaceObject = require("@modern-js/bff-effect/effect");
35
- const utils_namespaceObject = require("@modern-js/utils");
36
- const external_rendering_js_namespaceObject = require("./rendering.js");
37
- const external_runtime_js_namespaceObject = require("./runtime.js");
38
- function generateEffectClient(options) {
39
- return (0, external_runtime_js_namespaceObject.loadEffectApi)({
40
- appDir: options.appDir,
41
- resourcePath: options.resourcePath,
42
- onDependency: options.onDependency
43
- }).then((api)=>{
44
- if (null === api) {
45
- utils_namespaceObject.logger.warn(`[BFF][Effect] Failed to generate client for ${options.resourcePath}: unable to resolve exported HttpApi.`);
46
- return null;
47
- }
48
- return (0, external_runtime_js_namespaceObject.getHttpApiRuntime)().then((httpApiRuntime)=>{
49
- const endpoints = (0, effect_namespaceObject.collectEffectEndpoints)(httpApiRuntime.reflect, api, options.prefix);
50
- const generation = (0, external_rendering_js_namespaceObject.createEffectClientGeneration)(endpoints, options);
51
- return {
52
- code: (0, external_rendering_js_namespaceObject.renderEffectClientCode)(generation),
53
- declaration: (0, external_rendering_js_namespaceObject.renderEffectClientDeclaration)(endpoints),
54
- endpoints,
55
- operationContracts: generation.operationContracts,
56
- operationVersion: generation.operationVersion,
57
- requestId: generation.requestId
58
- };
59
- });
60
- });
61
- }
62
- function generateEffectClientCode(options) {
63
- return generateEffectClient(options).then((artifacts)=>null === artifacts ? null : artifacts.code);
64
- }
65
- exports.generateEffectClient = __webpack_exports__.generateEffectClient;
66
- exports.generateEffectClientCode = __webpack_exports__.generateEffectClientCode;
67
- for(var __rspack_i in __webpack_exports__)if (-1 === [
68
- "generateEffectClient",
69
- "generateEffectClientCode"
70
- ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
71
- Object.defineProperty(exports, '__esModule', {
72
- value: true
73
- });
@@ -1,54 +0,0 @@
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
- bundleBuiltEffectEntryForNode: ()=>external_built_entry_js_namespaceObject.bundleBuiltEffectEntryForNode,
32
- generateEffectClient: ()=>external_generator_js_namespaceObject.generateEffectClient,
33
- generateEffectClientCode: ()=>external_generator_js_namespaceObject.generateEffectClientCode,
34
- resolveEffectEntryFile: ()=>external_paths_js_namespaceObject.resolveEffectEntryFile,
35
- resolveEffectEntryPaths: ()=>external_built_entry_js_namespaceObject.resolveEffectEntryPaths
36
- });
37
- const external_built_entry_js_namespaceObject = require("./built-entry.js");
38
- const external_generator_js_namespaceObject = require("./generator.js");
39
- const external_paths_js_namespaceObject = require("./paths.js");
40
- exports.bundleBuiltEffectEntryForNode = __webpack_exports__.bundleBuiltEffectEntryForNode;
41
- exports.generateEffectClient = __webpack_exports__.generateEffectClient;
42
- exports.generateEffectClientCode = __webpack_exports__.generateEffectClientCode;
43
- exports.resolveEffectEntryFile = __webpack_exports__.resolveEffectEntryFile;
44
- exports.resolveEffectEntryPaths = __webpack_exports__.resolveEffectEntryPaths;
45
- for(var __rspack_i in __webpack_exports__)if (-1 === [
46
- "bundleBuiltEffectEntryForNode",
47
- "generateEffectClient",
48
- "generateEffectClientCode",
49
- "resolveEffectEntryFile",
50
- "resolveEffectEntryPaths"
51
- ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
52
- Object.defineProperty(exports, '__esModule', {
53
- value: true
54
- });