@bleedingdev/modern-js-app-tools 3.2.0-ultramodern.120 → 3.2.0-ultramodern.122

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 (44) hide show
  1. package/dist/cjs/baseline.js +3 -87
  2. package/dist/cjs/commands/index.js +3 -6
  3. package/dist/cjs/commands/runtime.js +35 -2
  4. package/dist/cjs/index.js +1 -1
  5. package/dist/cjs/plugins/deploy/platforms/cloudflare.js +20 -4
  6. package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.mjs +74 -13
  7. package/dist/cjs/plugins/deploy/utils/index.js +10 -35
  8. package/dist/cjs/presetUltramodern.js +87 -3
  9. package/dist/cjs/rsbuild.js +46 -62
  10. package/dist/cjs/types/config/cloudflareDeploy.js +18 -0
  11. package/dist/cjs/types/config/precompress.js +18 -0
  12. package/dist/esm/baseline.mjs +3 -77
  13. package/dist/esm/commands/index.mjs +2 -5
  14. package/dist/esm/commands/runtime.mjs +33 -3
  15. package/dist/esm/index.mjs +2 -2
  16. package/dist/esm/plugins/deploy/platforms/cloudflare.mjs +20 -4
  17. package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.mjs +74 -13
  18. package/dist/esm/plugins/deploy/utils/index.mjs +11 -36
  19. package/dist/esm/presetUltramodern.mjs +77 -3
  20. package/dist/esm/rsbuild.mjs +1 -8
  21. package/dist/esm/types/config/cloudflareDeploy.mjs +0 -0
  22. package/dist/esm/types/config/precompress.mjs +0 -0
  23. package/dist/esm-node/baseline.mjs +3 -77
  24. package/dist/esm-node/commands/index.mjs +2 -5
  25. package/dist/esm-node/commands/runtime.mjs +33 -3
  26. package/dist/esm-node/index.mjs +2 -2
  27. package/dist/esm-node/plugins/deploy/platforms/cloudflare.mjs +20 -4
  28. package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.mjs +74 -13
  29. package/dist/esm-node/plugins/deploy/utils/index.mjs +12 -36
  30. package/dist/esm-node/presetUltramodern.mjs +77 -3
  31. package/dist/esm-node/rsbuild.mjs +1 -8
  32. package/dist/esm-node/types/config/cloudflareDeploy.mjs +1 -0
  33. package/dist/esm-node/types/config/precompress.mjs +1 -0
  34. package/dist/types/baseline.d.ts +16 -46
  35. package/dist/types/commands/index.d.ts +1 -1
  36. package/dist/types/commands/runtime.d.ts +1 -0
  37. package/dist/types/presetUltramodern.d.ts +52 -2
  38. package/dist/types/types/config/cloudflareDeploy.d.ts +79 -0
  39. package/dist/types/types/config/deploy.d.ts +2 -56
  40. package/dist/types/types/config/output.d.ts +4 -20
  41. package/dist/types/types/config/precompress.d.ts +20 -0
  42. package/package.json +11 -13
  43. package/dist/esm/rslib-runtime.mjs +0 -18
  44. package/dist/esm-node/rslib-runtime.mjs +0 -19
@@ -1,6 +1,56 @@
1
- import { type AppBaselineOptions } from './baseline';
2
1
  import type { AppUserConfig } from './types';
3
- export interface PresetUltramodernOptions extends AppBaselineOptions {
2
+ export interface PresetUltramodernOptions {
3
+ /**
4
+ * Stable producer identity used by BFF cross-project clients.
5
+ * @default "app"
6
+ */
7
+ appId?: string;
8
+ /**
9
+ * Enable BFF requestId contract by default.
10
+ * @default true
11
+ */
12
+ enableBffRequestId?: boolean;
13
+ /**
14
+ * Enable telemetry contract by default.
15
+ * Exporters are still configured separately by applications.
16
+ * @default true
17
+ */
18
+ enableTelemetry?: boolean;
19
+ /**
20
+ * Enable telemetry exporters.
21
+ *
22
+ * By default each exporter is enabled only when its endpoint is explicitly
23
+ * configured (via the matching option or environment variable), so a bare
24
+ * preset app boots in production without local collectors.
25
+ * Set `true` to force both exporters on with their default localhost
26
+ * endpoints, or `false` to disable exporters entirely.
27
+ * @default undefined (endpoint-driven)
28
+ */
29
+ enableTelemetryExporters?: boolean;
30
+ /**
31
+ * OTLP exporter endpoint. Setting it (or the environment variable)
32
+ * enables the OTLP exporter unless `enableTelemetryExporters` is `false`.
33
+ * @default process.env.MODERN_TELEMETRY_OTLP_ENDPOINT || 'http://127.0.0.1:4318/v1/logs'
34
+ */
35
+ otlpEndpoint?: string;
36
+ /**
37
+ * VictoriaMetrics exporter endpoint. Setting it (or the environment
38
+ * variable) enables the VictoriaMetrics exporter unless
39
+ * `enableTelemetryExporters` is `false`.
40
+ * @default process.env.MODERN_TELEMETRY_VICTORIA_ENDPOINT || 'http://127.0.0.1:8428/api/v1/import/prometheus'
41
+ */
42
+ victoriaMetricsEndpoint?: string;
43
+ /**
44
+ * Enable fail-loud startup probing for telemetry exporters.
45
+ * Probes only run for exporters that are actually enabled.
46
+ * @default true
47
+ */
48
+ telemetryFailLoudStartup?: boolean;
49
+ /**
50
+ * Enable app-level Module Federation SSR handshake by default.
51
+ * @default true
52
+ */
53
+ enableModuleFederationSSR?: boolean;
4
54
  }
5
55
  export declare const createPresetUltramodernConfig: (options?: PresetUltramodernOptions) => AppUserConfig;
6
56
  export declare const presetUltramodern: (config: AppUserConfig, options?: PresetUltramodernOptions) => AppUserConfig;
@@ -0,0 +1,79 @@
1
+ export type DeployTarget = 'node' | 'vercel' | 'netlify' | 'ghPages' | 'cloudflare';
2
+ export type CloudflareWorkerSecurityCspMode = 'enforce' | 'report-only' | 'off';
3
+ export interface CloudflareWorkerSecurityCspConfig {
4
+ mode?: CloudflareWorkerSecurityCspMode;
5
+ directives?: Record<string, string[] | string | false>;
6
+ additionalScriptSrc?: string[];
7
+ additionalStyleSrc?: string[];
8
+ additionalConnectSrc?: string[];
9
+ additionalImgSrc?: string[];
10
+ frameAncestors?: string[] | false;
11
+ reportUri?: string;
12
+ reason?: string;
13
+ }
14
+ export interface CloudflareWorkerSecurityNoindexConfig {
15
+ workersDev?: boolean;
16
+ localhost?: boolean;
17
+ previewHostnames?: string[];
18
+ reason?: string;
19
+ }
20
+ export interface CloudflareWorkerSecurityCorsConfig {
21
+ /**
22
+ * Origins allowed to read application responses (BFF APIs, SSR HTML,
23
+ * route fallbacks) cross-origin. Accepts exact origins
24
+ * (e.g. `https://shell.example.com`) or `'*'`.
25
+ * When empty, application responses carry no CORS headers (same-origin).
26
+ * @default []
27
+ */
28
+ allowedOrigins?: string[];
29
+ /**
30
+ * Methods advertised on CORS preflight responses for application routes.
31
+ * @default ['GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS']
32
+ */
33
+ allowedMethods?: string[];
34
+ /**
35
+ * Headers advertised on CORS preflight responses for application routes.
36
+ * @default ['*']
37
+ */
38
+ allowedHeaders?: string[];
39
+ /**
40
+ * Apply wildcard CORS to static asset responses so federated remotes
41
+ * (remote entries, manifests, CSS) can be loaded cross-origin.
42
+ * @default true
43
+ */
44
+ assets?: boolean;
45
+ reason?: string;
46
+ }
47
+ export interface CloudflareWorkerSecurityConfig {
48
+ /**
49
+ * Disable all Cloudflare worker security defaults for this app.
50
+ * Prefer narrower escape hatches when possible.
51
+ */
52
+ enabled?: boolean;
53
+ headers?: {
54
+ referrerPolicy?: string | false;
55
+ contentTypeOptions?: 'nosniff' | false;
56
+ permissionsPolicy?: string | false;
57
+ };
58
+ contentSecurityPolicy?: CloudflareWorkerSecurityCspConfig;
59
+ noindex?: boolean | CloudflareWorkerSecurityNoindexConfig;
60
+ /**
61
+ * Cross-origin resource sharing policy applied by the generated worker.
62
+ * Asset responses default to wildcard CORS for federated loading;
63
+ * application responses (BFF, SSR) default to no CORS headers.
64
+ */
65
+ cors?: CloudflareWorkerSecurityCorsConfig;
66
+ /**
67
+ * @deprecated Write-only: this option never had any runtime effect — the
68
+ * generated worker never mutates application `Set-Cookie` headers.
69
+ * Kept temporarily so configs emitted by existing `modern create`
70
+ * templates keep typechecking; will be removed once the generator stops
71
+ * emitting it. Use {@link CloudflareWorkerSecurityConfig.cors} for the
72
+ * worker's cross-origin policy.
73
+ */
74
+ cookies?: {
75
+ mutateSetCookie?: false;
76
+ reason?: string;
77
+ };
78
+ reason?: string;
79
+ }
@@ -1,3 +1,5 @@
1
+ import type { CloudflareWorkerSecurityConfig, DeployTarget } from './cloudflareDeploy';
2
+ export type { CloudflareWorkerSecurityConfig, CloudflareWorkerSecurityCorsConfig, CloudflareWorkerSecurityCspConfig, CloudflareWorkerSecurityCspMode, CloudflareWorkerSecurityNoindexConfig, DeployTarget, } from './cloudflareDeploy';
1
3
  export interface MicroFrontend {
2
4
  /**
3
5
  * Specifies whether to enable the HTML entry.
@@ -11,62 +13,6 @@ export interface MicroFrontend {
11
13
  */
12
14
  externalBasicLibrary?: boolean;
13
15
  moduleApp?: string;
14
- /**
15
- * Runtime compatibility digest exposed in remote contracts (manifest / remote entry).
16
- */
17
- runtimeDigest?: string;
18
- /**
19
- * SRI-style integrity token for the remote entry contract.
20
- * Example: `sha256-<base64Digest>`.
21
- */
22
- integrity?: string;
23
- /**
24
- * Opaque attestation token exposed in remote runtime metadata.
25
- * Can be validated by the host via runtime `remoteTrust.attestations`.
26
- */
27
- attestation?: string;
28
- }
29
- export type DeployTarget = 'node' | 'vercel' | 'netlify' | 'ghPages' | 'cloudflare';
30
- export type CloudflareWorkerSecurityCspMode = 'enforce' | 'report-only' | 'off';
31
- export interface CloudflareWorkerSecurityCspConfig {
32
- mode?: CloudflareWorkerSecurityCspMode;
33
- directives?: Record<string, string[] | string | false>;
34
- additionalScriptSrc?: string[];
35
- additionalStyleSrc?: string[];
36
- additionalConnectSrc?: string[];
37
- additionalImgSrc?: string[];
38
- frameAncestors?: string[] | false;
39
- reportUri?: string;
40
- reason?: string;
41
- }
42
- export interface CloudflareWorkerSecurityNoindexConfig {
43
- workersDev?: boolean;
44
- localhost?: boolean;
45
- previewHostnames?: string[];
46
- reason?: string;
47
- }
48
- export interface CloudflareWorkerSecurityConfig {
49
- /**
50
- * Disable all Cloudflare worker security defaults for this app.
51
- * Prefer narrower escape hatches when possible.
52
- */
53
- enabled?: boolean;
54
- headers?: {
55
- referrerPolicy?: string | false;
56
- contentTypeOptions?: 'nosniff' | false;
57
- permissionsPolicy?: string | false;
58
- };
59
- contentSecurityPolicy?: CloudflareWorkerSecurityCspConfig;
60
- noindex?: boolean | CloudflareWorkerSecurityNoindexConfig;
61
- cookies?: {
62
- /**
63
- * Cloudflare worker does not mutate application Set-Cookie headers by
64
- * default; app-owned cookies should be secured by the owner that sets them.
65
- */
66
- mutateSetCookie?: false;
67
- reason?: string;
68
- };
69
- reason?: string;
70
16
  }
71
17
  export interface DeployUserConfig {
72
18
  /**
@@ -1,25 +1,8 @@
1
1
  import type { BuilderConfig } from '@modern-js/builder';
2
2
  import type { SSGConfig, SSGMultiEntryOptions } from '@modern-js/types';
3
- import type CompressionPlugin from 'compression-webpack-plugin';
4
3
  import type { UnwrapBuilderConfig } from '../utils';
5
- type CompressionPluginOptions = NonNullable<ConstructorParameters<typeof CompressionPlugin>[0]>;
6
- export type PrecompressCodecOptions = boolean | CompressionPluginOptions;
7
- export interface PrecompressConfig {
8
- /**
9
- * Configure gzip precompression options.
10
- * `true` means using default options.
11
- * `false` means disabling gzip precompression.
12
- * @default true
13
- */
14
- gzip?: PrecompressCodecOptions;
15
- /**
16
- * Configure brotli precompression options.
17
- * `true` means using default options.
18
- * `false` means disabling brotli precompression.
19
- * @default true
20
- */
21
- brotli?: PrecompressCodecOptions;
22
- }
4
+ import type { PrecompressConfig } from './precompress';
5
+ export type { PrecompressCodecOptions, PrecompressConfig } from './precompress';
23
6
  export interface OutputUserConfig extends UnwrapBuilderConfig<BuilderConfig, 'output'> {
24
7
  /**
25
8
  * Enable SSG for self-controlled routing or conventional routing.
@@ -54,7 +37,8 @@ export interface OutputUserConfig extends UnwrapBuilderConfig<BuilderConfig, 'ou
54
37
  /**
55
38
  * Generate precompressed static assets by using compression-webpack-plugin.
56
39
  * `true` means enabling both gzip and brotli with default options.
57
- * @default true
40
+ * Disabled unless explicitly configured; `presetUltramodern` enables it.
41
+ * @default false
58
42
  */
59
43
  precompress?: boolean | PrecompressConfig;
60
44
  }
@@ -0,0 +1,20 @@
1
+ import type CompressionPlugin from 'compression-webpack-plugin';
2
+ type CompressionPluginOptions = NonNullable<ConstructorParameters<typeof CompressionPlugin>[0]>;
3
+ export type PrecompressCodecOptions = boolean | CompressionPluginOptions;
4
+ export interface PrecompressConfig {
5
+ /**
6
+ * Configure gzip precompression options.
7
+ * `true` means using default options.
8
+ * `false` means disabling gzip precompression.
9
+ * @default true
10
+ */
11
+ gzip?: PrecompressCodecOptions;
12
+ /**
13
+ * Configure brotli precompression options.
14
+ * `true` means using default options.
15
+ * `false` means disabling brotli precompression.
16
+ * @default true
17
+ */
18
+ brotli?: PrecompressCodecOptions;
19
+ }
20
+ export {};
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "modern",
18
18
  "modern.js"
19
19
  ],
20
- "version": "3.2.0-ultramodern.120",
20
+ "version": "3.2.0-ultramodern.122",
21
21
  "types": "./dist/types/index.d.ts",
22
22
  "main": "./dist/cjs/index.js",
23
23
  "exports": {
@@ -87,28 +87,26 @@
87
87
  "@babel/types": "^7.29.7",
88
88
  "@loadable/component": "5.16.7",
89
89
  "@rsbuild/core": "2.0.11",
90
- "@swc/core": "1.15.41",
91
90
  "@swc/helpers": "^0.5.23",
92
91
  "compression-webpack-plugin": "^12.0.0",
93
92
  "es-module-lexer": "^2.1.0",
94
93
  "esbuild": "^0.28.0",
95
- "esbuild-register": "^3.6.0",
96
94
  "flatted": "^3.4.2",
97
95
  "import-meta-resolve": "^4.2.0",
98
96
  "mlly": "^1.8.2",
99
97
  "ndepe": "^0.1.13",
100
98
  "pkg-types": "^2.3.1",
101
99
  "std-env": "4.1.0",
102
- "@modern-js/builder": "npm:@bleedingdev/modern-js-builder@3.2.0-ultramodern.120",
103
- "@modern-js/plugin-data-loader": "npm:@bleedingdev/modern-js-plugin-data-loader@3.2.0-ultramodern.120",
104
- "@modern-js/server": "npm:@bleedingdev/modern-js-server@3.2.0-ultramodern.120",
105
- "@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.2.0-ultramodern.120",
106
- "@modern-js/prod-server": "npm:@bleedingdev/modern-js-prod-server@3.2.0-ultramodern.120",
107
- "@modern-js/server-core": "npm:@bleedingdev/modern-js-server-core@3.2.0-ultramodern.120",
108
- "@modern-js/server-utils": "npm:@bleedingdev/modern-js-server-utils@3.2.0-ultramodern.120",
109
- "@modern-js/types": "npm:@bleedingdev/modern-js-types@3.2.0-ultramodern.120",
110
- "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.2.0-ultramodern.120",
111
- "@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.2.0-ultramodern.120"
100
+ "@modern-js/builder": "npm:@bleedingdev/modern-js-builder@3.2.0-ultramodern.122",
101
+ "@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.2.0-ultramodern.122",
102
+ "@modern-js/prod-server": "npm:@bleedingdev/modern-js-prod-server@3.2.0-ultramodern.122",
103
+ "@modern-js/server": "npm:@bleedingdev/modern-js-server@3.2.0-ultramodern.122",
104
+ "@modern-js/plugin-data-loader": "npm:@bleedingdev/modern-js-plugin-data-loader@3.2.0-ultramodern.122",
105
+ "@modern-js/server-core": "npm:@bleedingdev/modern-js-server-core@3.2.0-ultramodern.122",
106
+ "@modern-js/types": "npm:@bleedingdev/modern-js-types@3.2.0-ultramodern.122",
107
+ "@modern-js/server-utils": "npm:@bleedingdev/modern-js-server-utils@3.2.0-ultramodern.122",
108
+ "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.2.0-ultramodern.122",
109
+ "@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.2.0-ultramodern.122"
112
110
  },
113
111
  "devDependencies": {
114
112
  "@rslib/core": "0.22.0",
@@ -1,18 +0,0 @@
1
- var __webpack_modules__ = {};
2
- var __webpack_module_cache__ = {};
3
- function __webpack_require__(moduleId) {
4
- var cachedModule = __webpack_module_cache__[moduleId];
5
- if (void 0 !== cachedModule) return cachedModule.exports;
6
- var module = __webpack_module_cache__[moduleId] = {
7
- exports: {}
8
- };
9
- __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
10
- return module.exports;
11
- }
12
- __webpack_require__.m = __webpack_modules__;
13
- (()=>{
14
- __webpack_require__.add = function(modules) {
15
- Object.assign(__webpack_require__.m, modules);
16
- };
17
- })();
18
- export { __webpack_require__ };
@@ -1,19 +0,0 @@
1
- import "node:module";
2
- var __webpack_modules__ = {};
3
- var __webpack_module_cache__ = {};
4
- function __webpack_require__(moduleId) {
5
- var cachedModule = __webpack_module_cache__[moduleId];
6
- if (void 0 !== cachedModule) return cachedModule.exports;
7
- var module = __webpack_module_cache__[moduleId] = {
8
- exports: {}
9
- };
10
- __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
11
- return module.exports;
12
- }
13
- __webpack_require__.m = __webpack_modules__;
14
- (()=>{
15
- __webpack_require__.add = function(modules) {
16
- Object.assign(__webpack_require__.m, modules);
17
- };
18
- })();
19
- export { __webpack_require__ };