@bleedingdev/modern-js-app-tools 3.5.0-ultramodern.23 → 3.5.0-ultramodern.25

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.
@@ -302,6 +302,7 @@ function getBuilderEnvironments(normalizedConfig, appContext, tempBuilderConfig)
302
302
  chain.output.module(true).library({
303
303
  type: 'module'
304
304
  }).chunkFormat('module').chunkLoading('import').workerChunkLoading('import');
305
+ chain.optimization.usedExports(false).providedExports(true).innerGraph(false).sideEffects(false);
305
306
  chain.plugins.delete('plugin-module-federation');
306
307
  if (tanstackRouterSsrServerFile) {
307
308
  chain.resolve.alias.set('@tanstack/router-core/ssr/server$', tanstackRouterSsrServerFile);
@@ -2,6 +2,8 @@ const ASSETS_BINDING = 'ASSETS';
2
2
  const MODERN_WORKER_MANIFEST = p_workerManifest;
3
3
  const WORKER_MODULE_LOADERS = p_workerModuleLoaders;
4
4
  const workerModulePromises = new Map();
5
+ const effectBffHandlerPromises = new Map();
6
+ let effectEdgeRuntimePromise;
5
7
  const remoteJsonPromises = new Map();
6
8
  const CORS_POLICY = MODERN_WORKER_MANIFEST.security?.cors || {};
7
9
  const ASSET_CORS_ENABLED = false !== CORS_POLICY.assets;
@@ -163,6 +165,7 @@ async function createCorsPreflightResponse(request, env) {
163
165
  });
164
166
  }
165
167
  async function fetchAsset(request, env) {
168
+ if ('GET' !== request.method && 'HEAD' !== request.method) return null;
166
169
  const assets = env?.[ASSETS_BINDING];
167
170
  if (!assets || 'function' != typeof assets.fetch) return null;
168
171
  const response = await assets.fetch(request);
@@ -211,7 +214,7 @@ function getPathExtension(pathname) {
211
214
  }
212
215
  function isAssetLikePathname(pathname) {
213
216
  const extension = getPathExtension(pathname);
214
- return '' !== extension && '.html' !== extension && '.htm' !== extension;
217
+ return '' !== extension;
215
218
  }
216
219
  function routeMatchesExactly(route, pathname) {
217
220
  if ('string' != typeof route?.urlPath) return false;
@@ -712,6 +715,10 @@ async function loadWorkerModule(workerPath) {
712
715
  if (!workerModulePromises.has(workerPath)) workerModulePromises.set(workerPath, loader());
713
716
  return workerModulePromises.get(workerPath);
714
717
  }
718
+ async function loadEffectEdgeRuntime() {
719
+ effectEdgeRuntimePromise ??= import('@modern-js/plugin-bff/effect-edge');
720
+ return effectEdgeRuntimePromise;
721
+ }
715
722
  function getRuntimeModule(workerModule) {
716
723
  const defaultExport = workerModule.default;
717
724
  const nestedDefaultExport = defaultExport && 'object' == typeof defaultExport ? defaultExport.default : void 0;
@@ -776,21 +783,6 @@ function createRequestForMountedPrefix(request, prefix) {
776
783
  url.pathname = nextPath.startsWith('/') ? nextPath : `/${nextPath}`;
777
784
  return new Request(url, request);
778
785
  }
779
- function createEffectContext(originalRequest, mountedRequest, env) {
780
- const url = new URL(originalRequest.url);
781
- return {
782
- request: mountedRequest,
783
- env: env || {},
784
- path: url.pathname,
785
- method: originalRequest.method,
786
- operationContext: {
787
- request: mountedRequest,
788
- env: env || {},
789
- path: url.pathname,
790
- method: originalRequest.method
791
- }
792
- };
793
- }
794
786
  async function dispatchBffRequest(request, env) {
795
787
  const bff = MODERN_WORKER_MANIFEST.bff;
796
788
  if (!bff?.worker || !matchesPrefix(new URL(request.url).pathname, bff.prefix)) return null;
@@ -803,9 +795,23 @@ async function dispatchBffRequest(request, env) {
803
795
  }
804
796
  });
805
797
  const mountedRequest = createRequestForMountedPrefix(request, bff.prefix);
806
- const effectContext = createEffectContext(request, mountedRequest, env);
807
798
  const defaultExport = workerModule.default;
808
799
  const runtime = getRuntimeModule(workerModule);
800
+ if ('effect' === bff.runtimeFramework) {
801
+ let effectHandlerPromise = effectBffHandlerPromises.get(bff.worker);
802
+ if (!effectHandlerPromise) {
803
+ const { createEffectBffEdgeHandler } = await loadEffectEdgeRuntime();
804
+ effectHandlerPromise = createEffectBffEdgeHandler({
805
+ module: runtime,
806
+ prefix: bff.prefix
807
+ });
808
+ effectBffHandlerPromises.set(bff.worker, effectHandlerPromise);
809
+ }
810
+ const effectHandler = await effectHandlerPromise;
811
+ return effectHandler.handler(request, {
812
+ env
813
+ });
814
+ }
809
815
  const directHandler = 'function' == typeof runtime.handler && runtime.handler || 'function' == typeof defaultExport && defaultExport;
810
816
  const createdHandler = 'function' == typeof runtime.createHandler ? runtime.createHandler().handler : void 0;
811
817
  const handler = directHandler || createdHandler;
@@ -816,7 +822,19 @@ async function dispatchBffRequest(request, env) {
816
822
  'x-modern-js-bff-worker': bff.worker
817
823
  }
818
824
  });
819
- return handler.length > 1 ? handler(mountedRequest, effectContext) : handler(mountedRequest);
825
+ const effectContext = {
826
+ request: mountedRequest,
827
+ env: env || {},
828
+ path: new URL(request.url).pathname,
829
+ method: request.method,
830
+ operationContext: {
831
+ request: mountedRequest,
832
+ env: env || {},
833
+ path: new URL(request.url).pathname,
834
+ method: request.method
835
+ }
836
+ };
837
+ return handler(mountedRequest, effectContext);
820
838
  }
821
839
  export default {
822
840
  async fetch (request, env, ctx) {
@@ -259,6 +259,7 @@ function getBuilderEnvironments(normalizedConfig, appContext, tempBuilderConfig)
259
259
  chain.output.module(true).library({
260
260
  type: 'module'
261
261
  }).chunkFormat('module').chunkLoading('import').workerChunkLoading('import');
262
+ chain.optimization.usedExports(false).providedExports(true).innerGraph(false).sideEffects(false);
262
263
  chain.plugins.delete('plugin-module-federation');
263
264
  if (tanstackRouterSsrServerFile) {
264
265
  chain.resolve.alias.set('@tanstack/router-core/ssr/server$', tanstackRouterSsrServerFile);
@@ -2,6 +2,8 @@ const ASSETS_BINDING = 'ASSETS';
2
2
  const MODERN_WORKER_MANIFEST = p_workerManifest;
3
3
  const WORKER_MODULE_LOADERS = p_workerModuleLoaders;
4
4
  const workerModulePromises = new Map();
5
+ const effectBffHandlerPromises = new Map();
6
+ let effectEdgeRuntimePromise;
5
7
  const remoteJsonPromises = new Map();
6
8
  const CORS_POLICY = MODERN_WORKER_MANIFEST.security?.cors || {};
7
9
  const ASSET_CORS_ENABLED = false !== CORS_POLICY.assets;
@@ -163,6 +165,7 @@ async function createCorsPreflightResponse(request, env) {
163
165
  });
164
166
  }
165
167
  async function fetchAsset(request, env) {
168
+ if ('GET' !== request.method && 'HEAD' !== request.method) return null;
166
169
  const assets = env?.[ASSETS_BINDING];
167
170
  if (!assets || 'function' != typeof assets.fetch) return null;
168
171
  const response = await assets.fetch(request);
@@ -211,7 +214,7 @@ function getPathExtension(pathname) {
211
214
  }
212
215
  function isAssetLikePathname(pathname) {
213
216
  const extension = getPathExtension(pathname);
214
- return '' !== extension && '.html' !== extension && '.htm' !== extension;
217
+ return '' !== extension;
215
218
  }
216
219
  function routeMatchesExactly(route, pathname) {
217
220
  if ('string' != typeof route?.urlPath) return false;
@@ -712,6 +715,10 @@ async function loadWorkerModule(workerPath) {
712
715
  if (!workerModulePromises.has(workerPath)) workerModulePromises.set(workerPath, loader());
713
716
  return workerModulePromises.get(workerPath);
714
717
  }
718
+ async function loadEffectEdgeRuntime() {
719
+ effectEdgeRuntimePromise ??= import('@modern-js/plugin-bff/effect-edge');
720
+ return effectEdgeRuntimePromise;
721
+ }
715
722
  function getRuntimeModule(workerModule) {
716
723
  const defaultExport = workerModule.default;
717
724
  const nestedDefaultExport = defaultExport && 'object' == typeof defaultExport ? defaultExport.default : void 0;
@@ -776,21 +783,6 @@ function createRequestForMountedPrefix(request, prefix) {
776
783
  url.pathname = nextPath.startsWith('/') ? nextPath : `/${nextPath}`;
777
784
  return new Request(url, request);
778
785
  }
779
- function createEffectContext(originalRequest, mountedRequest, env) {
780
- const url = new URL(originalRequest.url);
781
- return {
782
- request: mountedRequest,
783
- env: env || {},
784
- path: url.pathname,
785
- method: originalRequest.method,
786
- operationContext: {
787
- request: mountedRequest,
788
- env: env || {},
789
- path: url.pathname,
790
- method: originalRequest.method
791
- }
792
- };
793
- }
794
786
  async function dispatchBffRequest(request, env) {
795
787
  const bff = MODERN_WORKER_MANIFEST.bff;
796
788
  if (!bff?.worker || !matchesPrefix(new URL(request.url).pathname, bff.prefix)) return null;
@@ -803,9 +795,23 @@ async function dispatchBffRequest(request, env) {
803
795
  }
804
796
  });
805
797
  const mountedRequest = createRequestForMountedPrefix(request, bff.prefix);
806
- const effectContext = createEffectContext(request, mountedRequest, env);
807
798
  const defaultExport = workerModule.default;
808
799
  const runtime = getRuntimeModule(workerModule);
800
+ if ('effect' === bff.runtimeFramework) {
801
+ let effectHandlerPromise = effectBffHandlerPromises.get(bff.worker);
802
+ if (!effectHandlerPromise) {
803
+ const { createEffectBffEdgeHandler } = await loadEffectEdgeRuntime();
804
+ effectHandlerPromise = createEffectBffEdgeHandler({
805
+ module: runtime,
806
+ prefix: bff.prefix
807
+ });
808
+ effectBffHandlerPromises.set(bff.worker, effectHandlerPromise);
809
+ }
810
+ const effectHandler = await effectHandlerPromise;
811
+ return effectHandler.handler(request, {
812
+ env
813
+ });
814
+ }
809
815
  const directHandler = 'function' == typeof runtime.handler && runtime.handler || 'function' == typeof defaultExport && defaultExport;
810
816
  const createdHandler = 'function' == typeof runtime.createHandler ? runtime.createHandler().handler : void 0;
811
817
  const handler = directHandler || createdHandler;
@@ -816,7 +822,19 @@ async function dispatchBffRequest(request, env) {
816
822
  'x-modern-js-bff-worker': bff.worker
817
823
  }
818
824
  });
819
- return handler.length > 1 ? handler(mountedRequest, effectContext) : handler(mountedRequest);
825
+ const effectContext = {
826
+ request: mountedRequest,
827
+ env: env || {},
828
+ path: new URL(request.url).pathname,
829
+ method: request.method,
830
+ operationContext: {
831
+ request: mountedRequest,
832
+ env: env || {},
833
+ path: new URL(request.url).pathname,
834
+ method: request.method
835
+ }
836
+ };
837
+ return handler(mountedRequest, effectContext);
820
838
  }
821
839
  export default {
822
840
  async fetch (request, env, ctx) {
@@ -264,6 +264,7 @@ function getBuilderEnvironments(normalizedConfig, appContext, tempBuilderConfig)
264
264
  chain.output.module(true).library({
265
265
  type: 'module'
266
266
  }).chunkFormat('module').chunkLoading('import').workerChunkLoading('import');
267
+ chain.optimization.usedExports(false).providedExports(true).innerGraph(false).sideEffects(false);
267
268
  chain.plugins.delete('plugin-module-federation');
268
269
  if (tanstackRouterSsrServerFile) {
269
270
  chain.resolve.alias.set('@tanstack/router-core/ssr/server$', tanstackRouterSsrServerFile);
@@ -2,6 +2,8 @@ const ASSETS_BINDING = 'ASSETS';
2
2
  const MODERN_WORKER_MANIFEST = p_workerManifest;
3
3
  const WORKER_MODULE_LOADERS = p_workerModuleLoaders;
4
4
  const workerModulePromises = new Map();
5
+ const effectBffHandlerPromises = new Map();
6
+ let effectEdgeRuntimePromise;
5
7
  const remoteJsonPromises = new Map();
6
8
  const CORS_POLICY = MODERN_WORKER_MANIFEST.security?.cors || {};
7
9
  const ASSET_CORS_ENABLED = false !== CORS_POLICY.assets;
@@ -163,6 +165,7 @@ async function createCorsPreflightResponse(request, env) {
163
165
  });
164
166
  }
165
167
  async function fetchAsset(request, env) {
168
+ if ('GET' !== request.method && 'HEAD' !== request.method) return null;
166
169
  const assets = env?.[ASSETS_BINDING];
167
170
  if (!assets || 'function' != typeof assets.fetch) return null;
168
171
  const response = await assets.fetch(request);
@@ -211,7 +214,7 @@ function getPathExtension(pathname) {
211
214
  }
212
215
  function isAssetLikePathname(pathname) {
213
216
  const extension = getPathExtension(pathname);
214
- return '' !== extension && '.html' !== extension && '.htm' !== extension;
217
+ return '' !== extension;
215
218
  }
216
219
  function routeMatchesExactly(route, pathname) {
217
220
  if ('string' != typeof route?.urlPath) return false;
@@ -712,6 +715,10 @@ async function loadWorkerModule(workerPath) {
712
715
  if (!workerModulePromises.has(workerPath)) workerModulePromises.set(workerPath, loader());
713
716
  return workerModulePromises.get(workerPath);
714
717
  }
718
+ async function loadEffectEdgeRuntime() {
719
+ effectEdgeRuntimePromise ??= import('@modern-js/plugin-bff/effect-edge');
720
+ return effectEdgeRuntimePromise;
721
+ }
715
722
  function getRuntimeModule(workerModule) {
716
723
  const defaultExport = workerModule.default;
717
724
  const nestedDefaultExport = defaultExport && 'object' == typeof defaultExport ? defaultExport.default : void 0;
@@ -776,21 +783,6 @@ function createRequestForMountedPrefix(request, prefix) {
776
783
  url.pathname = nextPath.startsWith('/') ? nextPath : `/${nextPath}`;
777
784
  return new Request(url, request);
778
785
  }
779
- function createEffectContext(originalRequest, mountedRequest, env) {
780
- const url = new URL(originalRequest.url);
781
- return {
782
- request: mountedRequest,
783
- env: env || {},
784
- path: url.pathname,
785
- method: originalRequest.method,
786
- operationContext: {
787
- request: mountedRequest,
788
- env: env || {},
789
- path: url.pathname,
790
- method: originalRequest.method
791
- }
792
- };
793
- }
794
786
  async function dispatchBffRequest(request, env) {
795
787
  const bff = MODERN_WORKER_MANIFEST.bff;
796
788
  if (!bff?.worker || !matchesPrefix(new URL(request.url).pathname, bff.prefix)) return null;
@@ -803,9 +795,23 @@ async function dispatchBffRequest(request, env) {
803
795
  }
804
796
  });
805
797
  const mountedRequest = createRequestForMountedPrefix(request, bff.prefix);
806
- const effectContext = createEffectContext(request, mountedRequest, env);
807
798
  const defaultExport = workerModule.default;
808
799
  const runtime = getRuntimeModule(workerModule);
800
+ if ('effect' === bff.runtimeFramework) {
801
+ let effectHandlerPromise = effectBffHandlerPromises.get(bff.worker);
802
+ if (!effectHandlerPromise) {
803
+ const { createEffectBffEdgeHandler } = await loadEffectEdgeRuntime();
804
+ effectHandlerPromise = createEffectBffEdgeHandler({
805
+ module: runtime,
806
+ prefix: bff.prefix
807
+ });
808
+ effectBffHandlerPromises.set(bff.worker, effectHandlerPromise);
809
+ }
810
+ const effectHandler = await effectHandlerPromise;
811
+ return effectHandler.handler(request, {
812
+ env
813
+ });
814
+ }
809
815
  const directHandler = 'function' == typeof runtime.handler && runtime.handler || 'function' == typeof defaultExport && defaultExport;
810
816
  const createdHandler = 'function' == typeof runtime.createHandler ? runtime.createHandler().handler : void 0;
811
817
  const handler = directHandler || createdHandler;
@@ -816,7 +822,19 @@ async function dispatchBffRequest(request, env) {
816
822
  'x-modern-js-bff-worker': bff.worker
817
823
  }
818
824
  });
819
- return handler.length > 1 ? handler(mountedRequest, effectContext) : handler(mountedRequest);
825
+ const effectContext = {
826
+ request: mountedRequest,
827
+ env: env || {},
828
+ path: new URL(request.url).pathname,
829
+ method: request.method,
830
+ operationContext: {
831
+ request: mountedRequest,
832
+ env: env || {},
833
+ path: new URL(request.url).pathname,
834
+ method: request.method
835
+ }
836
+ };
837
+ return handler(mountedRequest, effectContext);
820
838
  }
821
839
  export default {
822
840
  async fetch (request, env, ctx) {
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "modern",
18
18
  "modern.js"
19
19
  ],
20
- "version": "3.5.0-ultramodern.23",
20
+ "version": "3.5.0-ultramodern.25",
21
21
  "types": "./dist/types/index.d.ts",
22
22
  "main": "./dist/cjs/index.js",
23
23
  "exports": {
@@ -90,16 +90,16 @@
90
90
  "ndepe": "^0.1.13",
91
91
  "pkg-types": "^2.3.1",
92
92
  "std-env": "4.1.0",
93
- "@modern-js/builder": "npm:@bleedingdev/modern-js-builder@3.5.0-ultramodern.23",
94
- "@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.5.0-ultramodern.23",
95
- "@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.5.0-ultramodern.23",
96
- "@modern-js/prod-server": "npm:@bleedingdev/modern-js-prod-server@3.5.0-ultramodern.23",
97
- "@modern-js/server-core": "npm:@bleedingdev/modern-js-server-core@3.5.0-ultramodern.23",
98
- "@modern-js/server": "npm:@bleedingdev/modern-js-server@3.5.0-ultramodern.23",
99
- "@modern-js/plugin-data-loader": "npm:@bleedingdev/modern-js-plugin-data-loader@3.5.0-ultramodern.23",
100
- "@modern-js/server-utils": "npm:@bleedingdev/modern-js-server-utils@3.5.0-ultramodern.23",
101
- "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.5.0-ultramodern.23",
102
- "@modern-js/types": "npm:@bleedingdev/modern-js-types@3.5.0-ultramodern.23"
93
+ "@modern-js/builder": "npm:@bleedingdev/modern-js-builder@3.5.0-ultramodern.25",
94
+ "@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.5.0-ultramodern.25",
95
+ "@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.5.0-ultramodern.25",
96
+ "@modern-js/plugin-data-loader": "npm:@bleedingdev/modern-js-plugin-data-loader@3.5.0-ultramodern.25",
97
+ "@modern-js/prod-server": "npm:@bleedingdev/modern-js-prod-server@3.5.0-ultramodern.25",
98
+ "@modern-js/server-utils": "npm:@bleedingdev/modern-js-server-utils@3.5.0-ultramodern.25",
99
+ "@modern-js/types": "npm:@bleedingdev/modern-js-types@3.5.0-ultramodern.25",
100
+ "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.5.0-ultramodern.25",
101
+ "@modern-js/server-core": "npm:@bleedingdev/modern-js-server-core@3.5.0-ultramodern.25",
102
+ "@modern-js/server": "npm:@bleedingdev/modern-js-server@3.5.0-ultramodern.25"
103
103
  },
104
104
  "devDependencies": {
105
105
  "@rslib/core": "0.23.1",