@bleedingdev/modern-js-app-tools-extensions 3.9.0-ultramodern.16 → 3.9.0-ultramodern.18

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 (57) hide show
  1. package/dist/cjs/backend-federation-build/codegen.js +22 -16
  2. package/dist/cjs/build-config/build-environment.js +2 -141
  3. package/dist/cjs/build-config/public.js +2 -5
  4. package/dist/cjs/cloudflare-builder.js +0 -30
  5. package/dist/cjs/config.js +2 -5
  6. package/dist/cjs/deploy-output/trace-files.js +90 -0
  7. package/dist/cjs/release-identity.js +2 -0
  8. package/dist/cjs/templates/cloudflare-entry.002-assets-routes.mjs +1 -1
  9. package/dist/cjs/templates/cloudflare-entry.004-rendering-css.mjs +1 -1
  10. package/dist/esm/backend-federation-build/codegen.mjs +22 -16
  11. package/dist/esm/build-config/build-environment.mjs +1 -137
  12. package/dist/esm/build-config/public.mjs +1 -1
  13. package/dist/esm/cloudflare-builder.mjs +0 -30
  14. package/dist/esm/config.mjs +1 -1
  15. package/dist/esm/deploy-output/trace-files.mjs +38 -0
  16. package/dist/esm/release-identity.mjs +2 -0
  17. package/dist/esm/templates/cloudflare-entry.002-assets-routes.mjs +1 -1
  18. package/dist/esm/templates/cloudflare-entry.004-rendering-css.mjs +1 -1
  19. package/dist/esm-node/backend-federation-build/codegen.mjs +22 -16
  20. package/dist/esm-node/build-config/build-environment.mjs +1 -137
  21. package/dist/esm-node/build-config/public.mjs +1 -1
  22. package/dist/esm-node/cloudflare-builder.mjs +0 -30
  23. package/dist/esm-node/config.mjs +1 -1
  24. package/dist/esm-node/deploy-output/trace-files.mjs +39 -0
  25. package/dist/esm-node/release-identity.mjs +2 -0
  26. package/dist/esm-node/templates/cloudflare-entry.002-assets-routes.mjs +1 -1
  27. package/dist/esm-node/templates/cloudflare-entry.004-rendering-css.mjs +1 -1
  28. package/dist/types/build-config/build-environment.d.ts +0 -8
  29. package/dist/types/build-config/public.d.ts +1 -1
  30. package/dist/types/config.d.ts +1 -1
  31. package/dist/types/deploy-output/trace-files.d.ts +17 -0
  32. package/package.json +34 -16
  33. package/src/backend-federation-build/codegen.ts +22 -17
  34. package/src/build-config/build-environment.ts +0 -244
  35. package/src/build-config/public.ts +0 -1
  36. package/src/cloudflare/index.ts +0 -3
  37. package/src/cloudflare-builder.ts +0 -85
  38. package/src/config.ts +0 -1
  39. package/src/deploy-output/trace-files.ts +67 -0
  40. package/src/release-identity.ts +10 -0
  41. package/src/templates/cloudflare-entry.002-assets-routes.mjs +1 -1
  42. package/src/templates/cloudflare-entry.004-rendering-css.mjs +1 -1
  43. package/dist/cjs/templates/cloudflare-worker-fs-promises.mjs +0 -11
  44. package/dist/cjs/templates/cloudflare-worker-loadable-server.mjs +0 -281
  45. package/dist/cjs/templates/cloudflare-worker-path.mjs +0 -98
  46. package/dist/esm/templates/cloudflare-worker-fs-promises.mjs +0 -11
  47. package/dist/esm/templates/cloudflare-worker-loadable-server.mjs +0 -281
  48. package/dist/esm/templates/cloudflare-worker-path.mjs +0 -98
  49. package/dist/esm-node/templates/cloudflare-worker-fs-promises.mjs +0 -11
  50. package/dist/esm-node/templates/cloudflare-worker-loadable-server.mjs +0 -281
  51. package/dist/esm-node/templates/cloudflare-worker-path.mjs +0 -98
  52. package/dist/types/templates/cloudflare-worker-fs-promises.d.mts +0 -5
  53. package/dist/types/templates/cloudflare-worker-loadable-server.d.mts +0 -48
  54. package/dist/types/templates/cloudflare-worker-path.d.mts +0 -21
  55. package/src/templates/cloudflare-worker-fs-promises.mjs +0 -11
  56. package/src/templates/cloudflare-worker-loadable-server.mjs +0 -281
  57. package/src/templates/cloudflare-worker-path.mjs +0 -98
@@ -88,28 +88,34 @@ const createBackendRemoteEntrySource = async (workspaceRoot, app, effectApiPath,
88
88
  } : {}
89
89
  };
90
90
  const source = `// Generated by Modern.js backend federation build.
91
- import * as exposedNamespace from ${JSON.stringify(effectApiSpecifier)};
91
+ import { adoptEffectBffShareScope } from '@modern-js/bff-effect/effect-edge';
92
92
 
93
- const exposedModule = {
94
- ...exposedNamespace,
95
- backendFederationContract: {
96
- ...(exposedNamespace.backendFederationContract ?? {}),
97
- compatibility: {
98
- ...(exposedNamespace.backendFederationContract?.compatibility ?? {}),
99
- ...${JSON.stringify(compatibility)},
93
+ // The expose evaluates lazily so defineEffectBff registers its handler
94
+ // factories with the registry the host shares through init().
95
+ let exposedModule;
96
+ const loadExposedModule = () =>
97
+ (exposedModule ??= import(${JSON.stringify(effectApiSpecifier)}).then(exposedNamespace => ({
98
+ ...exposedNamespace,
99
+ backendFederationContract: {
100
+ ...(exposedNamespace.backendFederationContract ?? {}),
101
+ compatibility: {
102
+ ...(exposedNamespace.backendFederationContract?.compatibility ?? {}),
103
+ ...${JSON.stringify(compatibility)},
104
+ },
105
+ name: ${JSON.stringify(app.backendName)},
106
+ role: 'microvertical-server',
107
+ runtimeFramework: 'effect',
108
+ strictEffectApproach: true,
100
109
  },
101
- name: ${JSON.stringify(app.backendName)},
102
- role: 'microvertical-server',
103
- runtimeFramework: 'effect',
104
- strictEffectApproach: true,
105
- },
106
- };
110
+ })));
107
111
  const exposedModules = {
108
- ${JSON.stringify(backend_federation_contracts_namespaceObject.BACKEND_FEDERATION_EFFECT_EXPOSE)}: () => Promise.resolve(exposedModule),
112
+ ${JSON.stringify(backend_federation_contracts_namespaceObject.BACKEND_FEDERATION_EFFECT_EXPOSE)}: loadExposedModule,
109
113
  };
110
114
  const __modernjsBackendFederation = ${JSON.stringify(containerMetadata)};
111
115
 
112
- function init() {}
116
+ function init(shareScope) {
117
+ return adoptEffectBffShareScope(shareScope);
118
+ }
113
119
 
114
120
  function get(id) {
115
121
  const load = exposedModules[id];
@@ -29,8 +29,7 @@ var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
31
  getBuildConfigEnvironment: ()=>getBuildConfigEnvironment,
32
- resolveEffectTsgoCompiler: ()=>resolveEffectTsgoCompiler,
33
- withBuildConfigEnvironment: ()=>withBuildConfigEnvironment
32
+ resolveEffectTsgoCompiler: ()=>resolveEffectTsgoCompiler
34
33
  });
35
34
  const external_node_child_process_namespaceObject = require("node:child_process");
36
35
  const external_node_crypto_namespaceObject = require("node:crypto");
@@ -42,127 +41,6 @@ const EFFECT_TSGO_PACKAGE = '@effect/tsgo';
42
41
  const EFFECT_TSGO_BIN = 'effect-tsgo';
43
42
  const EFFECT_TSGO_RESOLUTION_ERROR = 'Unable to resolve the Effect TS-Go compiler. Install "@effect/tsgo" and a native TypeScript backend for this build config, or set EFFECT_TSGO_BIN.';
44
43
  const executableEffectTsgoCompilers = new Map();
45
- const BUILD_CONFIG_ENVIRONMENT_PLUGIN = 'ModernJsBuildConfigEnvironmentLeasePlugin';
46
- const ENVIRONMENT_LEASE_REGISTRY_KEY = Symbol.for('@modern-js/app-tools/build-config-environment-lease-registry/v1');
47
- const ENVIRONMENT_LEASE_REGISTRY_BRAND = Symbol.for('@modern-js/app-tools/build-config-environment-lease-registry-brand/v1');
48
- const LIFECYCLE_HOOK_NAMES = [
49
- 'run',
50
- 'watchRun',
51
- 'afterDone',
52
- 'failed',
53
- 'shutdown',
54
- 'watchClose'
55
- ];
56
- function restoreEnvironment(name, value) {
57
- if (void 0 === value) delete process.env[name];
58
- else process.env[name] = value;
59
- }
60
- function createEnvironmentLeaseRegistry() {
61
- const environmentLeases = new Map();
62
- return Object.freeze({
63
- acquire (name, value) {
64
- let lease = environmentLeases.get(name);
65
- if (lease) {
66
- if (lease.value !== value) throw new Error(`Build config environment "${name}" already has an active lease for a different value.`);
67
- if (process.env[name] !== lease.value) throw new Error(`Build config environment lease for "${name}" lost ownership before another lease was acquired.`);
68
- } else {
69
- lease = {
70
- originalValue: process.env[name],
71
- owners: new Set(),
72
- value
73
- };
74
- process.env[name] = value;
75
- environmentLeases.set(name, lease);
76
- }
77
- const owner = Symbol(name);
78
- lease.owners.add(owner);
79
- let released = false;
80
- return ()=>{
81
- if (released) return;
82
- if (environmentLeases.get(name) !== lease || !lease.owners.has(owner)) throw new Error(`Build config environment lease for "${name}" cannot be restored because its ownership record was lost.`);
83
- released = true;
84
- const lostOwnership = process.env[name] !== lease.value;
85
- lease.owners.delete(owner);
86
- if (0 === lease.owners.size) {
87
- environmentLeases.delete(name);
88
- restoreEnvironment(name, lease.originalValue);
89
- } else if (lostOwnership) process.env[name] = lease.value;
90
- if (lostOwnership) throw new Error(`Build config environment lease for "${name}" lost ownership before restoration.`);
91
- };
92
- },
93
- brand: ENVIRONMENT_LEASE_REGISTRY_BRAND
94
- });
95
- }
96
- function getEnvironmentLeaseRegistry() {
97
- const descriptor = Object.getOwnPropertyDescriptor(process, ENVIRONMENT_LEASE_REGISTRY_KEY);
98
- if (descriptor) {
99
- const registry = descriptor.value;
100
- if (descriptor.configurable || descriptor.enumerable || descriptor.writable || registry?.brand !== ENVIRONMENT_LEASE_REGISTRY_BRAND || 'function' != typeof registry.acquire) throw new Error('The process-global build config environment lease registry is occupied by an incompatible value.');
101
- return registry;
102
- }
103
- const registry = createEnvironmentLeaseRegistry();
104
- Object.defineProperty(process, ENVIRONMENT_LEASE_REGISTRY_KEY, {
105
- configurable: false,
106
- enumerable: false,
107
- value: registry,
108
- writable: false
109
- });
110
- return registry;
111
- }
112
- function acquireEnvironmentLease(name, value) {
113
- return getEnvironmentLeaseRegistry().acquire(name, value);
114
- }
115
- function releaseAfterFailure(release, originalError) {
116
- try {
117
- release();
118
- } catch (restorationError) {
119
- throw new AggregateError([
120
- originalError,
121
- restorationError
122
- ], 'Build config environment setup and restoration both failed.');
123
- }
124
- throw originalError;
125
- }
126
- class BuildConfigEnvironmentLeasePlugin {
127
- apply(compiler) {
128
- const hooks = compiler.hooks;
129
- try {
130
- const lifecycleHooks = {};
131
- for (const hookName of LIFECYCLE_HOOK_NAMES){
132
- const hook = hooks[hookName];
133
- if (!hook || 'function' != typeof hook.tap) throw new Error(`Rspack does not expose the "${hookName}" lifecycle hook required to restore build config environment leases.`);
134
- lifecycleHooks[hookName] = hook;
135
- }
136
- let mode = 'pending';
137
- const modeTap = {
138
- name: BUILD_CONFIG_ENVIRONMENT_PLUGIN,
139
- stage: Number.MIN_SAFE_INTEGER
140
- };
141
- const releaseTap = {
142
- name: BUILD_CONFIG_ENVIRONMENT_PLUGIN,
143
- stage: Number.MAX_SAFE_INTEGER
144
- };
145
- const releaseAfterOneShot = ()=>{
146
- if ('watch' !== mode && true !== compiler.watchMode) this.release();
147
- };
148
- lifecycleHooks.run.tap(modeTap, ()=>{
149
- mode = 'run';
150
- });
151
- lifecycleHooks.watchRun.tap(modeTap, ()=>{
152
- mode = 'watch';
153
- });
154
- lifecycleHooks.afterDone.tap(releaseTap, releaseAfterOneShot);
155
- lifecycleHooks.failed.tap(releaseTap, releaseAfterOneShot);
156
- lifecycleHooks.shutdown.tap(releaseTap, this.release);
157
- lifecycleHooks.watchClose.tap(releaseTap, this.release);
158
- } catch (error) {
159
- releaseAfterFailure(this.release, error);
160
- }
161
- }
162
- constructor(release){
163
- this.release = release;
164
- }
165
- }
166
44
  function resolveEffectTsgoCli(from) {
167
45
  const projectRequire = (0, external_node_module_namespaceObject.createRequire)(from);
168
46
  const packageJsonPath = projectRequire.resolve(`${EFFECT_TSGO_PACKAGE}/package.json`);
@@ -222,21 +100,6 @@ function resolveExecutableEffectTsgoCompiler(compilerPath) {
222
100
  function getBuildConfigEnvironment(name) {
223
101
  return process.env[name];
224
102
  }
225
- function withBuildConfigEnvironment(name, value, setup) {
226
- return async (config, ...args)=>{
227
- const release = acquireEnvironmentLease(name, value);
228
- try {
229
- const configured = await setup(config, ...args) ?? config;
230
- configured.plugins = [
231
- ...configured.plugins ?? [],
232
- new BuildConfigEnvironmentLeasePlugin(release)
233
- ];
234
- return configured;
235
- } catch (error) {
236
- releaseAfterFailure(release, error);
237
- }
238
- };
239
- }
240
103
  function resolveEffectTsgoCompiler(options) {
241
104
  const configuredCompiler = getBuildConfigEnvironment('EFFECT_TSGO_BIN')?.trim();
242
105
  if (configuredCompiler) try {
@@ -257,11 +120,9 @@ function resolveEffectTsgoCompiler(options) {
257
120
  }
258
121
  exports.getBuildConfigEnvironment = __webpack_exports__.getBuildConfigEnvironment;
259
122
  exports.resolveEffectTsgoCompiler = __webpack_exports__.resolveEffectTsgoCompiler;
260
- exports.withBuildConfigEnvironment = __webpack_exports__.withBuildConfigEnvironment;
261
123
  for(var __rspack_i in __webpack_exports__)if (-1 === [
262
124
  "getBuildConfigEnvironment",
263
- "resolveEffectTsgoCompiler",
264
- "withBuildConfigEnvironment"
125
+ "resolveEffectTsgoCompiler"
265
126
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
266
127
  Object.defineProperty(exports, '__esModule', {
267
128
  value: true
@@ -29,17 +29,14 @@ var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
31
  getBuildConfigEnvironment: ()=>external_build_environment_js_namespaceObject.getBuildConfigEnvironment,
32
- resolveEffectTsgoCompiler: ()=>external_build_environment_js_namespaceObject.resolveEffectTsgoCompiler,
33
- withBuildConfigEnvironment: ()=>external_build_environment_js_namespaceObject.withBuildConfigEnvironment
32
+ resolveEffectTsgoCompiler: ()=>external_build_environment_js_namespaceObject.resolveEffectTsgoCompiler
34
33
  });
35
34
  const external_build_environment_js_namespaceObject = require("./build-environment.js");
36
35
  exports.getBuildConfigEnvironment = __webpack_exports__.getBuildConfigEnvironment;
37
36
  exports.resolveEffectTsgoCompiler = __webpack_exports__.resolveEffectTsgoCompiler;
38
- exports.withBuildConfigEnvironment = __webpack_exports__.withBuildConfigEnvironment;
39
37
  for(var __rspack_i in __webpack_exports__)if (-1 === [
40
38
  "getBuildConfigEnvironment",
41
- "resolveEffectTsgoCompiler",
42
- "withBuildConfigEnvironment"
39
+ "resolveEffectTsgoCompiler"
43
40
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
44
41
  Object.defineProperty(exports, '__esModule', {
45
42
  value: true
@@ -480,9 +480,6 @@ const createCloudflareBundlerChain = (appContext, workerEntryNames)=>{
480
480
  appContext.appDirectory,
481
481
  process.cwd()
482
482
  ];
483
- const tanstackRouterSsrServerFile = resolvePackageFile('@tanstack/router-core', 'dist/esm/ssr/ssr-server.js', resolvePaths);
484
- const runtimeRscWorkerFile = resolvePackageFile('@modern-js/runtime', 'dist/esm/rsc/server.worker.mjs', resolvePaths);
485
- const renderRscWorkerFile = resolvePackageFile('@modern-js/render', 'dist/esm/rscWorker.mjs', resolvePaths);
486
483
  const reactFile = resolvePackageFile('react', 'index.js', resolvePaths);
487
484
  const reactJsxRuntimeFile = resolvePackageFile('react', 'jsx-runtime.js', resolvePaths);
488
485
  const reactJsxDevRuntimeFile = resolvePackageFile('react', 'jsx-dev-runtime.js', resolvePaths);
@@ -492,9 +489,6 @@ const createCloudflareBundlerChain = (appContext, workerEntryNames)=>{
492
489
  ...resolvePaths,
493
490
  (0, external_read_template_js_namespaceObject.getTemplatePath)('')
494
491
  ]);
495
- const loadableServerWorkerFile = (0, external_read_template_js_namespaceObject.getTemplatePath)('cloudflare-worker-loadable-server.mjs');
496
- const fsPromisesWorkerFile = (0, external_read_template_js_namespaceObject.getTemplatePath)('cloudflare-worker-fs-promises.mjs');
497
- const pathWorkerFile = (0, external_read_template_js_namespaceObject.getTemplatePath)('cloudflare-worker-path.mjs');
498
492
  const entryNames = [
499
493
  ...workerEntryNames
500
494
  ];
@@ -519,36 +513,12 @@ const createCloudflareBundlerChain = (appContext, workerEntryNames)=>{
519
513
  });
520
514
  chain.plugin('cloudflare-worker-absent-optional-dependencies').use(AbsentOptionalDependencyPlugin);
521
515
  applyCloudflareWorkerMfRuntimeBoundary(chain);
522
- if (tanstackRouterSsrServerFile) {
523
- chain.resolve.alias.set('@tanstack/router-core/ssr/server$', tanstackRouterSsrServerFile);
524
- chain.resolve.alias.set('@tanstack/router-core/ssr/server', tanstackRouterSsrServerFile);
525
- }
526
- if (runtimeRscWorkerFile) {
527
- chain.resolve.alias.set('@modern-js/runtime/rsc/server$', runtimeRscWorkerFile);
528
- chain.resolve.alias.set('@modern-js/runtime/rsc/server', runtimeRscWorkerFile);
529
- }
530
- if (renderRscWorkerFile) {
531
- chain.resolve.alias.set('@modern-js/render/rsc$', renderRscWorkerFile);
532
- chain.resolve.alias.set('@modern-js/render/rsc', renderRscWorkerFile);
533
- chain.resolve.alias.set('@modern-js/render/rsc-worker$', renderRscWorkerFile);
534
- }
535
516
  setAliasIfPresent(chain.resolve.alias, 'react$', reactFile);
536
517
  setAliasIfPresent(chain.resolve.alias, 'react/jsx-runtime$', reactJsxRuntimeFile);
537
518
  setAliasIfPresent(chain.resolve.alias, 'react/jsx-dev-runtime$', reactJsxDevRuntimeFile);
538
519
  setAliasIfPresent(chain.resolve.alias, 'react-dom$', reactDomFile);
539
520
  setAliasIfPresent(chain.resolve.alias, 'react-dom/server.edge$', reactDomServerEdgeFile);
540
521
  setAliasIfPresent(chain.resolve.alias, '@loadable/component$', loadableComponentFile);
541
- setAliasIfPresent(chain.resolve.alias, '@loadable/server$', loadableServerWorkerFile);
542
- setAliasIfPresent(chain.resolve.alias, 'fs/promises$', fsPromisesWorkerFile);
543
- setAliasIfPresent(chain.resolve.alias, 'node:fs/promises$', fsPromisesWorkerFile);
544
- setAliasIfPresent(chain.resolve.alias, 'path$', pathWorkerFile);
545
- setAliasIfPresent(chain.resolve.alias, 'node:path$', pathWorkerFile);
546
- chain.resolve.alias.set('react-server-dom-rspack/server.node$', 'react-server-dom-rspack/server.edge');
547
- chain.resolve.alias.set('react-server-dom-rspack/server.node', 'react-server-dom-rspack/server.edge');
548
- chain.resolve.alias.set('react-server-dom-rspack/client.node$', 'react-server-dom-rspack/client.edge');
549
- chain.resolve.alias.set('react-server-dom-rspack/client.node', 'react-server-dom-rspack/client.edge');
550
- chain.resolve.fallback.set('fs', false);
551
- chain.resolve.fallback.set('node:fs', false);
552
522
  };
553
523
  };
554
524
  function getCloudflareBuilderEnvironments({ appContext, environments, normalizedConfig, resolveDeployProvider = resolveStdEnvDeployProvider }) {
@@ -30,20 +30,17 @@ __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
31
  createRemoteManifestUrl: ()=>remote_address_js_namespaceObject.createRemoteManifestUrl,
32
32
  getBuildConfigEnvironment: ()=>public_js_namespaceObject.getBuildConfigEnvironment,
33
- resolveEffectTsgoCompiler: ()=>public_js_namespaceObject.resolveEffectTsgoCompiler,
34
- withBuildConfigEnvironment: ()=>public_js_namespaceObject.withBuildConfigEnvironment
33
+ resolveEffectTsgoCompiler: ()=>public_js_namespaceObject.resolveEffectTsgoCompiler
35
34
  });
36
35
  const public_js_namespaceObject = require("./build-config/public.js");
37
36
  const remote_address_js_namespaceObject = require("./build-config/remote-address.js");
38
37
  exports.createRemoteManifestUrl = __webpack_exports__.createRemoteManifestUrl;
39
38
  exports.getBuildConfigEnvironment = __webpack_exports__.getBuildConfigEnvironment;
40
39
  exports.resolveEffectTsgoCompiler = __webpack_exports__.resolveEffectTsgoCompiler;
41
- exports.withBuildConfigEnvironment = __webpack_exports__.withBuildConfigEnvironment;
42
40
  for(var __rspack_i in __webpack_exports__)if (-1 === [
43
41
  "createRemoteManifestUrl",
44
42
  "getBuildConfigEnvironment",
45
- "resolveEffectTsgoCompiler",
46
- "withBuildConfigEnvironment"
43
+ "resolveEffectTsgoCompiler"
47
44
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
48
45
  Object.defineProperty(exports, '__esModule', {
49
46
  value: true
@@ -0,0 +1,90 @@
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
+ createBuildHostIgnore: ()=>createBuildHostIgnore,
41
+ traceDeployFiles: ()=>traceDeployFiles
42
+ });
43
+ const external_node_os_namespaceObject = require("node:os");
44
+ var external_node_os_default = /*#__PURE__*/ __webpack_require__.n(external_node_os_namespaceObject);
45
+ const external_node_path_namespaceObject = require("node:path");
46
+ var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
47
+ const nft_namespaceObject = require("@vercel/nft");
48
+ const SYSTEM_ROOTS = 'win32' === process.platform ? [] : [
49
+ '/dev',
50
+ '/etc',
51
+ '/proc',
52
+ '/run',
53
+ '/sys',
54
+ '/var/run'
55
+ ];
56
+ const GLOB_SEGMENT = /[*?[{]/;
57
+ const isInside = (parent, child)=>child === parent || child.startsWith(`${parent}${external_node_path_default().sep}`);
58
+ const globRoot = (absolutePattern)=>{
59
+ const { root } = external_node_path_default().parse(absolutePattern);
60
+ const segments = absolutePattern.slice(root.length).split(external_node_path_default().sep);
61
+ const index = segments.findIndex((segment)=>GLOB_SEGMENT.test(segment));
62
+ return -1 === index ? void 0 : external_node_path_default().join(root, ...segments.slice(0, index));
63
+ };
64
+ const createBuildHostIgnore = (base)=>{
65
+ const wholeDirectories = new Set([
66
+ external_node_path_default().parse(external_node_path_default().resolve(base)).root,
67
+ external_node_path_default().resolve(external_node_os_default().homedir()),
68
+ external_node_path_default().resolve(external_node_os_default().tmpdir())
69
+ ]);
70
+ return (relativePath)=>{
71
+ const absolutePath = external_node_path_default().resolve(base, relativePath);
72
+ if (SYSTEM_ROOTS.some((root)=>isInside(root, absolutePath))) return true;
73
+ const root = globRoot(absolutePath);
74
+ return void 0 !== root && wholeDirectories.has(root);
75
+ };
76
+ };
77
+ const traceDeployFiles = ({ entryFiles, sourceDir, base = '/' })=>(0, nft_namespaceObject.nodeFileTrace)(entryFiles, {
78
+ base,
79
+ processCwd: sourceDir,
80
+ ignore: createBuildHostIgnore(base)
81
+ });
82
+ exports.createBuildHostIgnore = __webpack_exports__.createBuildHostIgnore;
83
+ exports.traceDeployFiles = __webpack_exports__.traceDeployFiles;
84
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
85
+ "createBuildHostIgnore",
86
+ "traceDeployFiles"
87
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
88
+ Object.defineProperty(exports, '__esModule', {
89
+ value: true
90
+ });
@@ -36,11 +36,13 @@ const external_node_child_process_namespaceObject = require("node:child_process"
36
36
  const external_node_crypto_namespaceObject = require("node:crypto");
37
37
  const BUILD_MARKER_NAMESPACE = 'ultramodern-delivery-unit-release-build-marker:v1';
38
38
  const PROMOTABLE_SOURCE_REVISION_PATTERN = /^(?:[a-f0-9]{40}|[a-f0-9]{64})$/u;
39
+ const workspaceGitEnv = ()=>Object.fromEntries(Object.entries(process.env).filter(([name])=>!name.toUpperCase().startsWith('GIT_')));
39
40
  const gitOutput = (workspaceRoot, args)=>{
40
41
  try {
41
42
  return (0, external_node_child_process_namespaceObject.execFileSync)('git', args, {
42
43
  cwd: workspaceRoot,
43
44
  encoding: 'utf8',
45
+ env: workspaceGitEnv(),
44
46
  stdio: [
45
47
  'ignore',
46
48
  'pipe',
@@ -20,7 +20,7 @@ function withAssetHeaders(response, request) {
20
20
  });
21
21
  }
22
22
 
23
- async function createCorsPreflightResponse(request, env) {
23
+ async function createCorsPreflightResponse(request, _env) {
24
24
  if (request.method !== 'OPTIONS') {
25
25
  return null;
26
26
  }
@@ -1138,7 +1138,7 @@ async function withRouteCssLinks(
1138
1138
  seenCssHrefs.add(entry.preloadHref);
1139
1139
  return true;
1140
1140
  });
1141
- for (const { href, preloadHref } of uniqueCssEntries) {
1141
+ for (const { preloadHref } of uniqueCssEntries) {
1142
1142
  const preloadUrl = new URL(preloadHref);
1143
1143
  const preloadReference =
1144
1144
  preloadUrl.origin === requestOrigin
@@ -45,28 +45,34 @@ const createBackendRemoteEntrySource = async (workspaceRoot, app, effectApiPath,
45
45
  } : {}
46
46
  };
47
47
  const source = `// Generated by Modern.js backend federation build.
48
- import * as exposedNamespace from ${JSON.stringify(effectApiSpecifier)};
48
+ import { adoptEffectBffShareScope } from '@modern-js/bff-effect/effect-edge';
49
49
 
50
- const exposedModule = {
51
- ...exposedNamespace,
52
- backendFederationContract: {
53
- ...(exposedNamespace.backendFederationContract ?? {}),
54
- compatibility: {
55
- ...(exposedNamespace.backendFederationContract?.compatibility ?? {}),
56
- ...${JSON.stringify(compatibility)},
50
+ // The expose evaluates lazily so defineEffectBff registers its handler
51
+ // factories with the registry the host shares through init().
52
+ let exposedModule;
53
+ const loadExposedModule = () =>
54
+ (exposedModule ??= import(${JSON.stringify(effectApiSpecifier)}).then(exposedNamespace => ({
55
+ ...exposedNamespace,
56
+ backendFederationContract: {
57
+ ...(exposedNamespace.backendFederationContract ?? {}),
58
+ compatibility: {
59
+ ...(exposedNamespace.backendFederationContract?.compatibility ?? {}),
60
+ ...${JSON.stringify(compatibility)},
61
+ },
62
+ name: ${JSON.stringify(app.backendName)},
63
+ role: 'microvertical-server',
64
+ runtimeFramework: 'effect',
65
+ strictEffectApproach: true,
57
66
  },
58
- name: ${JSON.stringify(app.backendName)},
59
- role: 'microvertical-server',
60
- runtimeFramework: 'effect',
61
- strictEffectApproach: true,
62
- },
63
- };
67
+ })));
64
68
  const exposedModules = {
65
- ${JSON.stringify(BACKEND_FEDERATION_EFFECT_EXPOSE)}: () => Promise.resolve(exposedModule),
69
+ ${JSON.stringify(BACKEND_FEDERATION_EFFECT_EXPOSE)}: loadExposedModule,
66
70
  };
67
71
  const __modernjsBackendFederation = ${JSON.stringify(containerMetadata)};
68
72
 
69
- function init() {}
73
+ function init(shareScope) {
74
+ return adoptEffectBffShareScope(shareScope);
75
+ }
70
76
 
71
77
  function get(id) {
72
78
  const load = exposedModules[id];
@@ -8,127 +8,6 @@ const EFFECT_TSGO_PACKAGE = '@effect/tsgo';
8
8
  const EFFECT_TSGO_BIN = 'effect-tsgo';
9
9
  const EFFECT_TSGO_RESOLUTION_ERROR = 'Unable to resolve the Effect TS-Go compiler. Install "@effect/tsgo" and a native TypeScript backend for this build config, or set EFFECT_TSGO_BIN.';
10
10
  const executableEffectTsgoCompilers = new Map();
11
- const BUILD_CONFIG_ENVIRONMENT_PLUGIN = 'ModernJsBuildConfigEnvironmentLeasePlugin';
12
- const ENVIRONMENT_LEASE_REGISTRY_KEY = Symbol.for('@modern-js/app-tools/build-config-environment-lease-registry/v1');
13
- const ENVIRONMENT_LEASE_REGISTRY_BRAND = Symbol.for('@modern-js/app-tools/build-config-environment-lease-registry-brand/v1');
14
- const LIFECYCLE_HOOK_NAMES = [
15
- 'run',
16
- 'watchRun',
17
- 'afterDone',
18
- 'failed',
19
- 'shutdown',
20
- 'watchClose'
21
- ];
22
- function restoreEnvironment(name, value) {
23
- if (void 0 === value) delete process.env[name];
24
- else process.env[name] = value;
25
- }
26
- function createEnvironmentLeaseRegistry() {
27
- const environmentLeases = new Map();
28
- return Object.freeze({
29
- acquire (name, value) {
30
- let lease = environmentLeases.get(name);
31
- if (lease) {
32
- if (lease.value !== value) throw new Error(`Build config environment "${name}" already has an active lease for a different value.`);
33
- if (process.env[name] !== lease.value) throw new Error(`Build config environment lease for "${name}" lost ownership before another lease was acquired.`);
34
- } else {
35
- lease = {
36
- originalValue: process.env[name],
37
- owners: new Set(),
38
- value
39
- };
40
- process.env[name] = value;
41
- environmentLeases.set(name, lease);
42
- }
43
- const owner = Symbol(name);
44
- lease.owners.add(owner);
45
- let released = false;
46
- return ()=>{
47
- if (released) return;
48
- if (environmentLeases.get(name) !== lease || !lease.owners.has(owner)) throw new Error(`Build config environment lease for "${name}" cannot be restored because its ownership record was lost.`);
49
- released = true;
50
- const lostOwnership = process.env[name] !== lease.value;
51
- lease.owners.delete(owner);
52
- if (0 === lease.owners.size) {
53
- environmentLeases.delete(name);
54
- restoreEnvironment(name, lease.originalValue);
55
- } else if (lostOwnership) process.env[name] = lease.value;
56
- if (lostOwnership) throw new Error(`Build config environment lease for "${name}" lost ownership before restoration.`);
57
- };
58
- },
59
- brand: ENVIRONMENT_LEASE_REGISTRY_BRAND
60
- });
61
- }
62
- function getEnvironmentLeaseRegistry() {
63
- const descriptor = Object.getOwnPropertyDescriptor(process, ENVIRONMENT_LEASE_REGISTRY_KEY);
64
- if (descriptor) {
65
- const registry = descriptor.value;
66
- if (descriptor.configurable || descriptor.enumerable || descriptor.writable || registry?.brand !== ENVIRONMENT_LEASE_REGISTRY_BRAND || 'function' != typeof registry.acquire) throw new Error('The process-global build config environment lease registry is occupied by an incompatible value.');
67
- return registry;
68
- }
69
- const registry = createEnvironmentLeaseRegistry();
70
- Object.defineProperty(process, ENVIRONMENT_LEASE_REGISTRY_KEY, {
71
- configurable: false,
72
- enumerable: false,
73
- value: registry,
74
- writable: false
75
- });
76
- return registry;
77
- }
78
- function acquireEnvironmentLease(name, value) {
79
- return getEnvironmentLeaseRegistry().acquire(name, value);
80
- }
81
- function releaseAfterFailure(release, originalError) {
82
- try {
83
- release();
84
- } catch (restorationError) {
85
- throw new AggregateError([
86
- originalError,
87
- restorationError
88
- ], 'Build config environment setup and restoration both failed.');
89
- }
90
- throw originalError;
91
- }
92
- class BuildConfigEnvironmentLeasePlugin {
93
- apply(compiler) {
94
- const hooks = compiler.hooks;
95
- try {
96
- const lifecycleHooks = {};
97
- for (const hookName of LIFECYCLE_HOOK_NAMES){
98
- const hook = hooks[hookName];
99
- if (!hook || 'function' != typeof hook.tap) throw new Error(`Rspack does not expose the "${hookName}" lifecycle hook required to restore build config environment leases.`);
100
- lifecycleHooks[hookName] = hook;
101
- }
102
- let mode = 'pending';
103
- const modeTap = {
104
- name: BUILD_CONFIG_ENVIRONMENT_PLUGIN,
105
- stage: Number.MIN_SAFE_INTEGER
106
- };
107
- const releaseTap = {
108
- name: BUILD_CONFIG_ENVIRONMENT_PLUGIN,
109
- stage: Number.MAX_SAFE_INTEGER
110
- };
111
- const releaseAfterOneShot = ()=>{
112
- if ('watch' !== mode && true !== compiler.watchMode) this.release();
113
- };
114
- lifecycleHooks.run.tap(modeTap, ()=>{
115
- mode = 'run';
116
- });
117
- lifecycleHooks.watchRun.tap(modeTap, ()=>{
118
- mode = 'watch';
119
- });
120
- lifecycleHooks.afterDone.tap(releaseTap, releaseAfterOneShot);
121
- lifecycleHooks.failed.tap(releaseTap, releaseAfterOneShot);
122
- lifecycleHooks.shutdown.tap(releaseTap, this.release);
123
- lifecycleHooks.watchClose.tap(releaseTap, this.release);
124
- } catch (error) {
125
- releaseAfterFailure(this.release, error);
126
- }
127
- }
128
- constructor(release){
129
- this.release = release;
130
- }
131
- }
132
11
  function resolveEffectTsgoCli(from) {
133
12
  const projectRequire = createRequire(from);
134
13
  const packageJsonPath = projectRequire.resolve(`${EFFECT_TSGO_PACKAGE}/package.json`);
@@ -188,21 +67,6 @@ function resolveExecutableEffectTsgoCompiler(compilerPath) {
188
67
  function getBuildConfigEnvironment(name) {
189
68
  return process.env[name];
190
69
  }
191
- function withBuildConfigEnvironment(name, value, setup) {
192
- return async (config, ...args)=>{
193
- const release = acquireEnvironmentLease(name, value);
194
- try {
195
- const configured = await setup(config, ...args) ?? config;
196
- configured.plugins = [
197
- ...configured.plugins ?? [],
198
- new BuildConfigEnvironmentLeasePlugin(release)
199
- ];
200
- return configured;
201
- } catch (error) {
202
- releaseAfterFailure(release, error);
203
- }
204
- };
205
- }
206
70
  function resolveEffectTsgoCompiler(options) {
207
71
  const configuredCompiler = getBuildConfigEnvironment('EFFECT_TSGO_BIN')?.trim();
208
72
  if (configuredCompiler) try {
@@ -221,4 +85,4 @@ function resolveEffectTsgoCompiler(options) {
221
85
  } catch {}
222
86
  throw new Error(EFFECT_TSGO_RESOLUTION_ERROR);
223
87
  }
224
- export { getBuildConfigEnvironment, resolveEffectTsgoCompiler, withBuildConfigEnvironment };
88
+ export { getBuildConfigEnvironment, resolveEffectTsgoCompiler };
@@ -1 +1 @@
1
- export { getBuildConfigEnvironment, resolveEffectTsgoCompiler, withBuildConfigEnvironment } from "./build-environment.mjs";
1
+ export { getBuildConfigEnvironment, resolveEffectTsgoCompiler } from "./build-environment.mjs";