@bleedingdev/modern-js-plugin-bff-extensions 3.9.0-ultramodern.4 → 3.9.0-ultramodern.6
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 +6 -3
- package/dist/cjs/backend-federation/edge-runtime.js +3 -15
- package/dist/cjs/backend-federation/edge.js +8 -9
- package/dist/cjs/backend-federation/identity.js +17 -23
- package/dist/cjs/backend-federation/index.js +5 -5
- package/dist/cjs/backend-federation/load.js +3 -13
- package/dist/cjs/backend-federation/validate-loaded.js +2 -4
- package/dist/cjs/backend-federation-manifest/load.js +9 -7
- package/dist/cjs/backend-federation-manifest/metadata.js +3 -3
- package/dist/cjs/backend-federation-manifest/remote.js +2 -2
- package/dist/cjs/backend-federation-manifest/validation.js +7 -7
- package/dist/cjs/cross-project-policy/evaluation.js +3 -3
- package/dist/cjs/cross-project-policy/node.js +4 -3
- package/dist/cjs/{backend-federation/legacy-warning.js → cross-project-policy/producer-runtime.js} +23 -5
- package/dist/cjs/effect-adapter/entry.js +1 -0
- package/dist/cjs/effect-adapter/index.js +9 -2
- package/dist/cjs/{client-generator → effect-source-loader}/built-entry.js +1 -1
- package/dist/cjs/{client-generator/runtime.js → effect-source-loader/http-api-runtime.js} +12 -20
- package/dist/cjs/effect-source-loader/index.js +14 -6
- package/dist/cjs/effect-source-loader/loader.js +6 -4
- package/dist/cjs/effect-source-loader/operation-contracts.js +83 -0
- package/dist/cjs/effect-source-loader/rspack-loader.js +73 -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/hono/node.js +51 -0
- package/dist/esm/backend-federation/edge-runtime.mjs +2 -11
- package/dist/esm/backend-federation/edge.mjs +4 -5
- package/dist/esm/backend-federation/identity.mjs +17 -23
- package/dist/esm/backend-federation/index.mjs +1 -1
- package/dist/esm/backend-federation/load.mjs +2 -12
- package/dist/esm/backend-federation/validate-loaded.mjs +2 -4
- package/dist/esm/backend-federation-manifest/load.mjs +9 -7
- package/dist/esm/backend-federation-manifest/metadata.mjs +1 -1
- package/dist/esm/backend-federation-manifest/remote.mjs +1 -1
- package/dist/esm/backend-federation-manifest/validation.mjs +5 -5
- package/dist/esm/cross-project-policy/evaluation.mjs +1 -1
- package/dist/esm/cross-project-policy/node.mjs +2 -1
- package/dist/esm/cross-project-policy/producer-runtime.mjs +20 -0
- package/dist/esm/effect-adapter/entry.mjs +1 -0
- package/dist/esm/effect-adapter/index.mjs +5 -1
- package/dist/esm/{client-generator → effect-source-loader}/built-entry.mjs +1 -1
- package/dist/esm/effect-source-loader/http-api-runtime.mjs +19 -0
- package/dist/esm/effect-source-loader/index.mjs +4 -2
- package/dist/esm/effect-source-loader/loader.mjs +6 -4
- package/dist/esm/effect-source-loader/operation-contracts.mjs +45 -0
- package/dist/esm/effect-source-loader/rspack-loader.mjs +35 -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 +4 -5
- package/dist/esm-node/backend-federation/identity.mjs +17 -23
- package/dist/esm-node/backend-federation/index.mjs +1 -1
- package/dist/esm-node/backend-federation/load.mjs +2 -12
- package/dist/esm-node/backend-federation/validate-loaded.mjs +2 -4
- package/dist/esm-node/backend-federation-manifest/load.mjs +9 -7
- package/dist/esm-node/backend-federation-manifest/metadata.mjs +1 -1
- package/dist/esm-node/backend-federation-manifest/remote.mjs +1 -1
- package/dist/esm-node/backend-federation-manifest/validation.mjs +5 -5
- package/dist/esm-node/cross-project-policy/evaluation.mjs +1 -1
- package/dist/esm-node/cross-project-policy/node.mjs +2 -1
- package/dist/esm-node/cross-project-policy/producer-runtime.mjs +21 -0
- package/dist/esm-node/effect-adapter/entry.mjs +1 -0
- package/dist/esm-node/effect-adapter/index.mjs +5 -1
- package/dist/esm-node/{client-generator → effect-source-loader}/built-entry.mjs +1 -1
- package/dist/esm-node/effect-source-loader/http-api-runtime.mjs +20 -0
- package/dist/esm-node/effect-source-loader/index.mjs +4 -2
- package/dist/esm-node/effect-source-loader/loader.mjs +6 -4
- package/dist/esm-node/effect-source-loader/operation-contracts.mjs +46 -0
- package/dist/esm-node/effect-source-loader/rspack-loader.mjs +37 -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 +1 -3
- package/dist/types/backend-federation/identity.d.ts +2 -11
- package/dist/types/backend-federation/index.d.ts +1 -1
- package/dist/types/backend-federation/load.d.ts +1 -7
- package/dist/types/backend-federation/node.d.ts +1 -3
- package/dist/types/backend-federation/types.d.ts +1 -7
- 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/cross-project-policy/evaluation.d.ts +1 -1
- package/dist/types/cross-project-policy/node.d.ts +2 -1
- package/dist/types/cross-project-policy/producer-runtime.d.ts +20 -0
- package/dist/types/effect-adapter/entry.d.ts +1 -0
- package/dist/types/effect-adapter/index.d.ts +2 -0
- package/dist/types/effect-source-loader/index.d.ts +4 -2
- package/dist/types/effect-source-loader/operation-contracts.d.ts +8 -0
- package/dist/types/effect-source-loader/rspack-loader.d.ts +9 -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 +48 -20
- package/src/backend-federation/edge-runtime.ts +2 -13
- package/src/backend-federation/edge.ts +9 -17
- package/src/backend-federation/identity.ts +9 -27
- package/src/backend-federation/index.ts +1 -1
- package/src/backend-federation/load.ts +7 -34
- package/src/backend-federation/node.ts +0 -11
- package/src/backend-federation/types.ts +1 -7
- package/src/backend-federation/validate-loaded.ts +2 -7
- package/src/backend-federation-manifest/load.ts +20 -14
- package/src/backend-federation-manifest/metadata.ts +1 -7
- package/src/backend-federation-manifest/remote.ts +1 -1
- package/src/backend-federation-manifest/validation.ts +10 -13
- package/src/cross-project-policy/evaluation.ts +1 -1
- package/src/cross-project-policy/node.ts +3 -3
- package/src/cross-project-policy/producer-runtime.ts +43 -0
- package/src/effect-adapter/entry.ts +1 -0
- package/src/effect-adapter/index.ts +5 -0
- package/src/{client-generator → effect-source-loader}/built-entry.ts +1 -3
- package/src/effect-source-loader/http-api-runtime.ts +39 -0
- package/src/effect-source-loader/index.ts +7 -5
- package/src/effect-source-loader/loader.ts +29 -23
- package/src/effect-source-loader/operation-contracts.ts +72 -0
- package/src/effect-source-loader/rspack-loader.ts +72 -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/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/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/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-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/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/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/rendering.d.ts +0 -24
- package/dist/types/client-generator/types.d.ts +0 -33
- 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/rendering.ts +0 -307
- package/src/client-generator/runtime.ts +0 -69
- package/src/client-generator/types.ts +0 -35
- /package/dist/cjs/{client-generator → effect-source-loader}/paths.js +0 -0
- /package/dist/esm/{client-generator → effect-source-loader}/paths.mjs +0 -0
- /package/dist/esm-node/{client-generator → effect-source-loader}/paths.mjs +0 -0
- /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
- /package/dist/types/{client-generator → effect-source-loader}/paths.d.ts +0 -0
- /package/src/{client-generator → effect-source-loader}/paths.ts +0 -0
|
@@ -39,31 +39,37 @@ function preserveSourceModuleSemantics(): Plugin {
|
|
|
39
39
|
return {
|
|
40
40
|
name: 'modern-js-effect-source-semantics',
|
|
41
41
|
setup(buildApi) {
|
|
42
|
-
buildApi.onLoad(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
buildApi.onLoad(
|
|
43
|
+
{ filter: /\.[cm]?[jt]sx?$/, namespace: 'file' },
|
|
44
|
+
async args => {
|
|
45
|
+
const loader = sourceLoader(args);
|
|
46
|
+
if (!loader) {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
47
49
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
50
|
+
const source = await fs.promises.readFile(args.path, 'utf8');
|
|
51
|
+
const canonicalSourcePath = await fs.promises.realpath(args.path);
|
|
52
|
+
const compiled = await transform(source, {
|
|
53
|
+
define: {
|
|
54
|
+
__dirname: JSON.stringify(path.dirname(canonicalSourcePath)),
|
|
55
|
+
__filename: JSON.stringify(canonicalSourcePath),
|
|
56
|
+
'import.meta.url': JSON.stringify(
|
|
57
|
+
pathToFileURL(canonicalSourcePath).href,
|
|
58
|
+
),
|
|
59
|
+
},
|
|
60
|
+
jsx: 'automatic',
|
|
61
|
+
loader,
|
|
62
|
+
sourcefile: args.path,
|
|
63
|
+
target: NODE_TARGET,
|
|
64
|
+
});
|
|
60
65
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
return {
|
|
67
|
+
contents: compiled.code,
|
|
68
|
+
loader: 'js',
|
|
69
|
+
resolveDir: path.dirname(args.path),
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
);
|
|
67
73
|
},
|
|
68
74
|
};
|
|
69
75
|
}
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { realpathSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import type { Rspack } from '@rsbuild/core';
|
|
4
|
+
import {
|
|
5
|
+
bundleEffectWorkerRuntimeSource,
|
|
6
|
+
generateEffectWorkerRuntimeWrapper,
|
|
7
|
+
resolveEffectEntryFile,
|
|
8
|
+
} from './index';
|
|
9
|
+
|
|
10
|
+
export interface EffectBffLoaderOptions {
|
|
11
|
+
prefix: string;
|
|
12
|
+
appDir: string;
|
|
13
|
+
apiDir: string;
|
|
14
|
+
effectEntry: string;
|
|
15
|
+
requestId?: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export default async function loader(
|
|
19
|
+
this: Rspack.LoaderContext<EffectBffLoaderOptions>,
|
|
20
|
+
source: string,
|
|
21
|
+
) {
|
|
22
|
+
this.cacheable();
|
|
23
|
+
delete require.cache[this.resourcePath];
|
|
24
|
+
const callback = this.async();
|
|
25
|
+
try {
|
|
26
|
+
const options = this.getOptions();
|
|
27
|
+
const entry = resolveEffectEntryFile(options);
|
|
28
|
+
if (!entry || realpathSync(entry) !== realpathSync(this.resourcePath))
|
|
29
|
+
throw new Error(
|
|
30
|
+
`Unexpected Effect BFF loader resource: ${this.resourcePath}`,
|
|
31
|
+
);
|
|
32
|
+
const query = new URLSearchParams(this.resourceQuery);
|
|
33
|
+
if (query.has('modern-bff-runtime-source')) {
|
|
34
|
+
const { transform } = await import('@swc/core');
|
|
35
|
+
const transformed = await transform(source, {
|
|
36
|
+
filename: this.resourcePath,
|
|
37
|
+
sourceMaps: false,
|
|
38
|
+
jsc: {
|
|
39
|
+
parser: {
|
|
40
|
+
syntax: 'typescript',
|
|
41
|
+
tsx: /\.[jt]sx$/.test(this.resourcePath),
|
|
42
|
+
},
|
|
43
|
+
target: 'es2024',
|
|
44
|
+
},
|
|
45
|
+
module: { type: 'es6' },
|
|
46
|
+
});
|
|
47
|
+
callback(
|
|
48
|
+
undefined,
|
|
49
|
+
await bundleEffectWorkerRuntimeSource(
|
|
50
|
+
transformed.code,
|
|
51
|
+
this.resourcePath,
|
|
52
|
+
this,
|
|
53
|
+
),
|
|
54
|
+
);
|
|
55
|
+
} else if (query.has('modern-bff-runtime')) {
|
|
56
|
+
callback(
|
|
57
|
+
undefined,
|
|
58
|
+
await generateEffectWorkerRuntimeWrapper(
|
|
59
|
+
this,
|
|
60
|
+
options,
|
|
61
|
+
this.resourcePath,
|
|
62
|
+
),
|
|
63
|
+
);
|
|
64
|
+
} else {
|
|
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
|
+
);
|
|
68
|
+
}
|
|
69
|
+
} catch (error) {
|
|
70
|
+
callback(error instanceof Error ? error : new Error(String(error)));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -1,90 +1,20 @@
|
|
|
1
|
-
|
|
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:
|
|
5
|
+
options: { appDir: string; prefix: string; requestId?: string },
|
|
27
6
|
resourcePath: string,
|
|
28
7
|
) {
|
|
29
|
-
const
|
|
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
|
-
import {
|
|
50
|
-
|
|
51
|
-
const __generatedOperationContracts = ${JSON.stringify(operationContracts)};
|
|
52
|
-
|
|
53
|
-
const __mergeGeneratedOperationContracts = policy => {
|
|
54
|
-
if (
|
|
55
|
-
!policy ||
|
|
56
|
-
!policy.expectedOperationContracts ||
|
|
57
|
-
typeof policy.expectedOperationContracts !== 'object' ||
|
|
58
|
-
Array.isArray(policy.expectedOperationContracts)
|
|
59
|
-
) {
|
|
60
|
-
return policy;
|
|
61
|
-
}
|
|
62
|
-
return {
|
|
63
|
-
...policy,
|
|
64
|
-
expectedOperationContracts: {
|
|
65
|
-
...policy.expectedOperationContracts,
|
|
66
|
-
...__generatedOperationContracts,
|
|
67
|
-
},
|
|
68
|
-
};
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
export const __modern_create_effect_bff_dispatcher = options =>
|
|
72
|
-
createEffectBffEdgeDispatcher({
|
|
73
|
-
...options,
|
|
74
|
-
crossProjectPolicy: __mergeGeneratedOperationContracts(
|
|
75
|
-
options?.crossProjectPolicy,
|
|
76
|
-
),
|
|
77
|
-
module: effectBffModule,
|
|
78
|
-
});
|
|
17
|
+
import { createEffectBffEdgeDispatcherFactory } from '@modern-js/bff-effect/effect-edge';
|
|
18
|
+
export const __modern_create_effect_bff_dispatcher = createEffectBffEdgeDispatcherFactory(effectBffModule, ${JSON.stringify(operationContracts ?? {})});
|
|
79
19
|
`;
|
|
80
20
|
}
|
|
81
|
-
|
|
82
|
-
export async function generateEffectClientCode(
|
|
83
|
-
options: EffectClientCodegenOptions,
|
|
84
|
-
) {
|
|
85
|
-
const { generateEffectClient } = await import(
|
|
86
|
-
'../client-generator/generator'
|
|
87
|
-
);
|
|
88
|
-
const artifacts = await generateEffectClient(options);
|
|
89
|
-
return artifacts === null ? null : artifacts.code;
|
|
90
|
-
}
|
package/src/hono/node.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ServerPluginAPI } from '@modern-js/server-core';
|
|
2
|
+
import type { OperationContractSource } from '@modern-js/server-runtime-extensions/bff-policy/node';
|
|
3
|
+
import { logger } from '@modern-js/utils';
|
|
4
|
+
import { resolveAdapterCrossProjectPolicy } from '../cross-project-policy/node';
|
|
5
|
+
import {
|
|
6
|
+
type BindHonoRouteHandlersOptions,
|
|
7
|
+
bindHonoRouteHandlers,
|
|
8
|
+
} from './bind-route-handlers';
|
|
9
|
+
|
|
10
|
+
export const createHonoRouteBinder = (
|
|
11
|
+
api: ServerPluginAPI,
|
|
12
|
+
handlers: OperationContractSource[],
|
|
13
|
+
) => {
|
|
14
|
+
const policy = resolveAdapterCrossProjectPolicy(api, handlers);
|
|
15
|
+
return (
|
|
16
|
+
options: Pick<BindHonoRouteHandlersOptions, 'handler' | 'routePath'>,
|
|
17
|
+
) =>
|
|
18
|
+
bindHonoRouteHandlers({
|
|
19
|
+
...options,
|
|
20
|
+
policy,
|
|
21
|
+
onError: api.getServerConfig()?.onError,
|
|
22
|
+
reportError: error => logger.error(error),
|
|
23
|
+
});
|
|
24
|
+
};
|
|
@@ -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
|
-
});
|