@bleedingdev/modern-js-server-runtime-extensions 0.0.0-trusted-publisher-bootstrap

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 (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +67 -0
  3. package/dist/cjs/contractGateAutopilot.js +162 -0
  4. package/dist/cjs/contractGateSnapshotStore.js +253 -0
  5. package/dist/cjs/env.js +58 -0
  6. package/dist/cjs/index.js +162 -0
  7. package/dist/cjs/mfCache.js +106 -0
  8. package/dist/cjs/moduleFederationCss.js +285 -0
  9. package/dist/cjs/runtimeFallbackSignal.js +311 -0
  10. package/dist/cjs/telemetry.js +373 -0
  11. package/dist/cjs/telemetryCore.js +819 -0
  12. package/dist/esm/contractGateAutopilot.mjs +124 -0
  13. package/dist/esm/contractGateSnapshotStore.mjs +190 -0
  14. package/dist/esm/env.mjs +17 -0
  15. package/dist/esm/index.mjs +6 -0
  16. package/dist/esm/mfCache.mjs +55 -0
  17. package/dist/esm/moduleFederationCss.mjs +225 -0
  18. package/dist/esm/runtimeFallbackSignal.mjs +222 -0
  19. package/dist/esm/telemetry.mjs +275 -0
  20. package/dist/esm/telemetryCore.mjs +759 -0
  21. package/dist/esm-node/contractGateAutopilot.mjs +125 -0
  22. package/dist/esm-node/contractGateSnapshotStore.mjs +192 -0
  23. package/dist/esm-node/env.mjs +18 -0
  24. package/dist/esm-node/index.mjs +7 -0
  25. package/dist/esm-node/mfCache.mjs +56 -0
  26. package/dist/esm-node/moduleFederationCss.mjs +226 -0
  27. package/dist/esm-node/runtimeFallbackSignal.mjs +223 -0
  28. package/dist/esm-node/telemetry.mjs +276 -0
  29. package/dist/esm-node/telemetryCore.mjs +760 -0
  30. package/dist/types/contractGateAutopilot.d.ts +35 -0
  31. package/dist/types/contractGateSnapshotStore.d.ts +57 -0
  32. package/dist/types/env.d.ts +40 -0
  33. package/dist/types/index.d.ts +6 -0
  34. package/dist/types/mfCache.d.ts +27 -0
  35. package/dist/types/moduleFederationCss.d.ts +87 -0
  36. package/dist/types/runtimeFallbackSignal.d.ts +94 -0
  37. package/dist/types/telemetry.d.ts +12 -0
  38. package/dist/types/telemetryCore.d.ts +257 -0
  39. package/package.json +69 -0
  40. package/rslib.config.mts +4 -0
  41. package/rstest.config.mts +7 -0
  42. package/src/contractGateAutopilot.ts +247 -0
  43. package/src/contractGateSnapshotStore.ts +420 -0
  44. package/src/env.ts +63 -0
  45. package/src/index.ts +84 -0
  46. package/src/mfCache.ts +119 -0
  47. package/src/moduleFederationCss.ts +473 -0
  48. package/src/runtimeFallbackSignal.ts +584 -0
  49. package/src/telemetry.ts +554 -0
  50. package/src/telemetryCore.ts +1332 -0
  51. package/tests/contractGateAutopilot.test.ts +203 -0
  52. package/tests/contractGateSnapshotStore.test.ts +223 -0
  53. package/tests/env.test.ts +73 -0
  54. package/tests/helpers.ts +19 -0
  55. package/tests/mfCache.test.ts +150 -0
  56. package/tests/moduleFederationCss.test.ts +392 -0
  57. package/tests/registration.test.ts +112 -0
  58. package/tests/telemetry.test.ts +360 -0
  59. package/tests/telemetryAutopilot.test.ts +993 -0
  60. package/tests/telemetryCanaryOrchestrator.test.ts +140 -0
  61. package/tests/telemetryLifecycle.test.ts +168 -0
  62. package/tests/telemetryTraceparent.test.ts +167 -0
  63. package/tests/tsconfig.json +11 -0
  64. package/tsconfig.json +10 -0
@@ -0,0 +1,162 @@
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
+ CONTRACT_GATE_SNAPSHOT_SCHEMA_VERSION: ()=>external_contractGateSnapshotStore_js_namespaceObject.CONTRACT_GATE_SNAPSHOT_SCHEMA_VERSION,
32
+ ContractGateAutopilot: ()=>external_contractGateAutopilot_js_namespaceObject.ContractGateAutopilot,
33
+ DEFAULT_CONTRACT_GATE_SNAPSHOT_PATH: ()=>external_contractGateSnapshotStore_js_namespaceObject.DEFAULT_CONTRACT_GATE_SNAPSHOT_PATH,
34
+ DEFAULT_ENVIRONMENT_NAME: ()=>external_env_js_namespaceObject.DEFAULT_ENVIRONMENT_NAME,
35
+ DEFAULT_RUNTIME_FALLBACK_SIGNAL_ENDPOINT: ()=>external_telemetry_js_namespaceObject.DEFAULT_RUNTIME_FALLBACK_SIGNAL_ENDPOINT,
36
+ DEFAULT_RUNTIME_STATUS_ENDPOINT: ()=>external_telemetry_js_namespaceObject.DEFAULT_RUNTIME_STATUS_ENDPOINT,
37
+ TelemetryCanaryOrchestrator: ()=>external_telemetry_js_namespaceObject.TelemetryCanaryOrchestrator,
38
+ TelemetryRegistry: ()=>external_telemetry_js_namespaceObject.TelemetryRegistry,
39
+ TelemetryStartupHealthError: ()=>external_telemetry_js_namespaceObject.TelemetryStartupHealthError,
40
+ collectDirectRemoteModuleFederationCss: ()=>external_moduleFederationCss_js_namespaceObject.collectDirectRemoteModuleFederationCss,
41
+ collectDirectRemoteModuleFederationCssWithMeta: ()=>external_moduleFederationCss_js_namespaceObject.collectDirectRemoteModuleFederationCssWithMeta,
42
+ collectModuleFederationManifestCss: ()=>external_moduleFederationCss_js_namespaceObject.collectModuleFederationManifestCss,
43
+ createFileContractGateSnapshotStore: ()=>external_contractGateSnapshotStore_js_namespaceObject.createFileContractGateSnapshotStore,
44
+ createHttpContractGateSnapshotStore: ()=>external_contractGateSnapshotStore_js_namespaceObject.createHttpContractGateSnapshotStore,
45
+ createModuleFederationCssCollector: ()=>external_moduleFederationCss_js_namespaceObject.createModuleFederationCssCollector,
46
+ createOtlpTelemetryExporter: ()=>external_telemetry_js_namespaceObject.createOtlpTelemetryExporter,
47
+ createRuntimeFallbackSignalRuntimeState: ()=>external_telemetry_js_namespaceObject.createRuntimeFallbackSignalRuntimeState,
48
+ createRuntimeSignalError: ()=>external_telemetry_js_namespaceObject.createRuntimeSignalError,
49
+ createTelemetryAwareMetrics: ()=>external_telemetry_js_namespaceObject.createTelemetryAwareMetrics,
50
+ createVictoriaMetricsTelemetryExporter: ()=>external_telemetry_js_namespaceObject.createVictoriaMetricsTelemetryExporter,
51
+ enforceRuntimeFallbackSignalAuthToken: ()=>external_telemetry_js_namespaceObject.enforceRuntimeFallbackSignalAuthToken,
52
+ enforceRuntimeFallbackSignalTrustPolicy: ()=>external_telemetry_js_namespaceObject.enforceRuntimeFallbackSignalTrustPolicy,
53
+ getRequestPathname: ()=>external_mfCache_js_namespaceObject.getRequestPathname,
54
+ getRuntimeSignalErrorStatusCode: ()=>external_telemetry_js_namespaceObject.getRuntimeSignalErrorStatusCode,
55
+ hasEnabledTelemetryExporters: ()=>external_telemetry_js_namespaceObject.hasEnabledTelemetryExporters,
56
+ injectMfAssetCacheHeadersPlugin: ()=>external_mfCache_js_namespaceObject.injectMfAssetCacheHeadersPlugin,
57
+ injectModuleFederationCssPlugin: ()=>external_moduleFederationCss_js_namespaceObject.injectModuleFederationCssPlugin,
58
+ injectTelemetryPlugin: ()=>external_telemetry_js_namespaceObject.injectTelemetryPlugin,
59
+ isMfManifestAsset: ()=>external_mfCache_js_namespaceObject.isMfManifestAsset,
60
+ isMfRemoteEntryAsset: ()=>external_mfCache_js_namespaceObject.isMfRemoteEntryAsset,
61
+ normalizeRequiredRuntimeFallbackSignalAuthConfig: ()=>external_telemetry_js_namespaceObject.normalizeRequiredRuntimeFallbackSignalAuthConfig,
62
+ normalizeRuntimeFallbackSignalAuthConfig: ()=>external_telemetry_js_namespaceObject.normalizeRuntimeFallbackSignalAuthConfig,
63
+ normalizeRuntimeFallbackTrustPolicy: ()=>external_telemetry_js_namespaceObject.normalizeRuntimeFallbackTrustPolicy,
64
+ parseRuntimeFallbackSignalPayloadFromRawBody: ()=>external_telemetry_js_namespaceObject.parseRuntimeFallbackSignalPayloadFromRawBody,
65
+ parseServerRuntimeExtensionsEnv: ()=>external_env_js_namespaceObject.parseServerRuntimeExtensionsEnv,
66
+ resolveContractGateSnapshotPath: ()=>external_contractGateSnapshotStore_js_namespaceObject.resolveContractGateSnapshotPath,
67
+ resolveContractGateSnapshotStore: ()=>external_contractGateSnapshotStore_js_namespaceObject.resolveContractGateSnapshotStore,
68
+ resolveMfAssetCacheHeaders: ()=>external_mfCache_js_namespaceObject.resolveMfAssetCacheHeaders,
69
+ resolveRuntimeFallbackSignalEndpoint: ()=>external_telemetry_js_namespaceObject.resolveRuntimeFallbackSignalEndpoint,
70
+ resolveTelemetrySloOptions: ()=>external_telemetry_js_namespaceObject.resolveTelemetrySloOptions
71
+ });
72
+ const external_contractGateAutopilot_js_namespaceObject = require("./contractGateAutopilot.js");
73
+ const external_contractGateSnapshotStore_js_namespaceObject = require("./contractGateSnapshotStore.js");
74
+ const external_env_js_namespaceObject = require("./env.js");
75
+ const external_mfCache_js_namespaceObject = require("./mfCache.js");
76
+ const external_moduleFederationCss_js_namespaceObject = require("./moduleFederationCss.js");
77
+ const external_telemetry_js_namespaceObject = require("./telemetry.js");
78
+ exports.CONTRACT_GATE_SNAPSHOT_SCHEMA_VERSION = __webpack_exports__.CONTRACT_GATE_SNAPSHOT_SCHEMA_VERSION;
79
+ exports.ContractGateAutopilot = __webpack_exports__.ContractGateAutopilot;
80
+ exports.DEFAULT_CONTRACT_GATE_SNAPSHOT_PATH = __webpack_exports__.DEFAULT_CONTRACT_GATE_SNAPSHOT_PATH;
81
+ exports.DEFAULT_ENVIRONMENT_NAME = __webpack_exports__.DEFAULT_ENVIRONMENT_NAME;
82
+ exports.DEFAULT_RUNTIME_FALLBACK_SIGNAL_ENDPOINT = __webpack_exports__.DEFAULT_RUNTIME_FALLBACK_SIGNAL_ENDPOINT;
83
+ exports.DEFAULT_RUNTIME_STATUS_ENDPOINT = __webpack_exports__.DEFAULT_RUNTIME_STATUS_ENDPOINT;
84
+ exports.TelemetryCanaryOrchestrator = __webpack_exports__.TelemetryCanaryOrchestrator;
85
+ exports.TelemetryRegistry = __webpack_exports__.TelemetryRegistry;
86
+ exports.TelemetryStartupHealthError = __webpack_exports__.TelemetryStartupHealthError;
87
+ exports.collectDirectRemoteModuleFederationCss = __webpack_exports__.collectDirectRemoteModuleFederationCss;
88
+ exports.collectDirectRemoteModuleFederationCssWithMeta = __webpack_exports__.collectDirectRemoteModuleFederationCssWithMeta;
89
+ exports.collectModuleFederationManifestCss = __webpack_exports__.collectModuleFederationManifestCss;
90
+ exports.createFileContractGateSnapshotStore = __webpack_exports__.createFileContractGateSnapshotStore;
91
+ exports.createHttpContractGateSnapshotStore = __webpack_exports__.createHttpContractGateSnapshotStore;
92
+ exports.createModuleFederationCssCollector = __webpack_exports__.createModuleFederationCssCollector;
93
+ exports.createOtlpTelemetryExporter = __webpack_exports__.createOtlpTelemetryExporter;
94
+ exports.createRuntimeFallbackSignalRuntimeState = __webpack_exports__.createRuntimeFallbackSignalRuntimeState;
95
+ exports.createRuntimeSignalError = __webpack_exports__.createRuntimeSignalError;
96
+ exports.createTelemetryAwareMetrics = __webpack_exports__.createTelemetryAwareMetrics;
97
+ exports.createVictoriaMetricsTelemetryExporter = __webpack_exports__.createVictoriaMetricsTelemetryExporter;
98
+ exports.enforceRuntimeFallbackSignalAuthToken = __webpack_exports__.enforceRuntimeFallbackSignalAuthToken;
99
+ exports.enforceRuntimeFallbackSignalTrustPolicy = __webpack_exports__.enforceRuntimeFallbackSignalTrustPolicy;
100
+ exports.getRequestPathname = __webpack_exports__.getRequestPathname;
101
+ exports.getRuntimeSignalErrorStatusCode = __webpack_exports__.getRuntimeSignalErrorStatusCode;
102
+ exports.hasEnabledTelemetryExporters = __webpack_exports__.hasEnabledTelemetryExporters;
103
+ exports.injectMfAssetCacheHeadersPlugin = __webpack_exports__.injectMfAssetCacheHeadersPlugin;
104
+ exports.injectModuleFederationCssPlugin = __webpack_exports__.injectModuleFederationCssPlugin;
105
+ exports.injectTelemetryPlugin = __webpack_exports__.injectTelemetryPlugin;
106
+ exports.isMfManifestAsset = __webpack_exports__.isMfManifestAsset;
107
+ exports.isMfRemoteEntryAsset = __webpack_exports__.isMfRemoteEntryAsset;
108
+ exports.normalizeRequiredRuntimeFallbackSignalAuthConfig = __webpack_exports__.normalizeRequiredRuntimeFallbackSignalAuthConfig;
109
+ exports.normalizeRuntimeFallbackSignalAuthConfig = __webpack_exports__.normalizeRuntimeFallbackSignalAuthConfig;
110
+ exports.normalizeRuntimeFallbackTrustPolicy = __webpack_exports__.normalizeRuntimeFallbackTrustPolicy;
111
+ exports.parseRuntimeFallbackSignalPayloadFromRawBody = __webpack_exports__.parseRuntimeFallbackSignalPayloadFromRawBody;
112
+ exports.parseServerRuntimeExtensionsEnv = __webpack_exports__.parseServerRuntimeExtensionsEnv;
113
+ exports.resolveContractGateSnapshotPath = __webpack_exports__.resolveContractGateSnapshotPath;
114
+ exports.resolveContractGateSnapshotStore = __webpack_exports__.resolveContractGateSnapshotStore;
115
+ exports.resolveMfAssetCacheHeaders = __webpack_exports__.resolveMfAssetCacheHeaders;
116
+ exports.resolveRuntimeFallbackSignalEndpoint = __webpack_exports__.resolveRuntimeFallbackSignalEndpoint;
117
+ exports.resolveTelemetrySloOptions = __webpack_exports__.resolveTelemetrySloOptions;
118
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
119
+ "CONTRACT_GATE_SNAPSHOT_SCHEMA_VERSION",
120
+ "ContractGateAutopilot",
121
+ "DEFAULT_CONTRACT_GATE_SNAPSHOT_PATH",
122
+ "DEFAULT_ENVIRONMENT_NAME",
123
+ "DEFAULT_RUNTIME_FALLBACK_SIGNAL_ENDPOINT",
124
+ "DEFAULT_RUNTIME_STATUS_ENDPOINT",
125
+ "TelemetryCanaryOrchestrator",
126
+ "TelemetryRegistry",
127
+ "TelemetryStartupHealthError",
128
+ "collectDirectRemoteModuleFederationCss",
129
+ "collectDirectRemoteModuleFederationCssWithMeta",
130
+ "collectModuleFederationManifestCss",
131
+ "createFileContractGateSnapshotStore",
132
+ "createHttpContractGateSnapshotStore",
133
+ "createModuleFederationCssCollector",
134
+ "createOtlpTelemetryExporter",
135
+ "createRuntimeFallbackSignalRuntimeState",
136
+ "createRuntimeSignalError",
137
+ "createTelemetryAwareMetrics",
138
+ "createVictoriaMetricsTelemetryExporter",
139
+ "enforceRuntimeFallbackSignalAuthToken",
140
+ "enforceRuntimeFallbackSignalTrustPolicy",
141
+ "getRequestPathname",
142
+ "getRuntimeSignalErrorStatusCode",
143
+ "hasEnabledTelemetryExporters",
144
+ "injectMfAssetCacheHeadersPlugin",
145
+ "injectModuleFederationCssPlugin",
146
+ "injectTelemetryPlugin",
147
+ "isMfManifestAsset",
148
+ "isMfRemoteEntryAsset",
149
+ "normalizeRequiredRuntimeFallbackSignalAuthConfig",
150
+ "normalizeRuntimeFallbackSignalAuthConfig",
151
+ "normalizeRuntimeFallbackTrustPolicy",
152
+ "parseRuntimeFallbackSignalPayloadFromRawBody",
153
+ "parseServerRuntimeExtensionsEnv",
154
+ "resolveContractGateSnapshotPath",
155
+ "resolveContractGateSnapshotStore",
156
+ "resolveMfAssetCacheHeaders",
157
+ "resolveRuntimeFallbackSignalEndpoint",
158
+ "resolveTelemetrySloOptions"
159
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
160
+ Object.defineProperty(exports, '__esModule', {
161
+ value: true
162
+ });
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
13
+ };
14
+ })();
15
+ (()=>{
16
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
17
+ })();
18
+ (()=>{
19
+ __webpack_require__.r = (exports1)=>{
20
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
21
+ value: 'Module'
22
+ });
23
+ Object.defineProperty(exports1, '__esModule', {
24
+ value: true
25
+ });
26
+ };
27
+ })();
28
+ var __webpack_exports__ = {};
29
+ __webpack_require__.r(__webpack_exports__);
30
+ const REMOTE_ENTRY_REGEXP = /(^|\/)remoteEntry(?:\.[a-zA-Z0-9_-]+)?\.js$/;
31
+ function firstQueryValue(value) {
32
+ if (Array.isArray(value)) return value.find((item)=>'string' == typeof item && item.length > 0);
33
+ if ('string' == typeof value && value.length > 0) return value;
34
+ }
35
+ function getRequestPathname(url) {
36
+ try {
37
+ return new URL(url, 'http://modernjs.local').pathname;
38
+ } catch (_error) {
39
+ return url.split('?')[0] || '/';
40
+ }
41
+ }
42
+ function isMfManifestAsset(pathname) {
43
+ return pathname.endsWith('/mf-manifest.json') || pathname.endsWith('/mf-stats.json');
44
+ }
45
+ function isMfRemoteEntryAsset(pathname) {
46
+ return REMOTE_ENTRY_REGEXP.test(pathname);
47
+ }
48
+ function hasRemoteVersionPin(query = {}) {
49
+ return Boolean(firstQueryValue(query.mfv) || firstQueryValue(query.v) || firstQueryValue(query.version));
50
+ }
51
+ function resolveMfAssetCacheHeaders(url, query = {}) {
52
+ const pathname = getRequestPathname(url);
53
+ if (isMfManifestAsset(pathname)) return {
54
+ 'cache-control': 'no-cache, no-store, must-revalidate',
55
+ pragma: 'no-cache',
56
+ expires: '0'
57
+ };
58
+ if (isMfRemoteEntryAsset(pathname)) return hasRemoteVersionPin(query) ? {
59
+ 'cache-control': 'public, max-age=31536000, immutable'
60
+ } : {
61
+ 'cache-control': 'public, max-age=0, must-revalidate'
62
+ };
63
+ }
64
+ const injectMfAssetCacheHeadersPlugin = ()=>({
65
+ name: '@modern-js/inject-mf-asset-cache-headers',
66
+ setup (api) {
67
+ api.onPrepare(()=>{
68
+ const { middlewares } = api.getServerContext();
69
+ const handler = async (c, next)=>{
70
+ await next();
71
+ if (!c.res || c.res.status >= 400) return;
72
+ const headers = resolveMfAssetCacheHeaders(c.req.path, c.req.query());
73
+ if (!headers) return;
74
+ for (const [name, value] of Object.entries(headers))c.res.headers.set(name, value);
75
+ };
76
+ middlewares.push({
77
+ name: 'mf-asset-cache-headers',
78
+ handler,
79
+ order: 'pre'
80
+ });
81
+ });
82
+ }
83
+ });
84
+ __webpack_require__.d(__webpack_exports__, {
85
+ getRequestPathname: ()=>getRequestPathname,
86
+ isMfManifestAsset: ()=>isMfManifestAsset,
87
+ isMfRemoteEntryAsset: ()=>isMfRemoteEntryAsset,
88
+ resolveMfAssetCacheHeaders: ()=>resolveMfAssetCacheHeaders
89
+ }, {
90
+ injectMfAssetCacheHeadersPlugin: injectMfAssetCacheHeadersPlugin
91
+ });
92
+ exports.getRequestPathname = __webpack_exports__.getRequestPathname;
93
+ exports.injectMfAssetCacheHeadersPlugin = __webpack_exports__.injectMfAssetCacheHeadersPlugin;
94
+ exports.isMfManifestAsset = __webpack_exports__.isMfManifestAsset;
95
+ exports.isMfRemoteEntryAsset = __webpack_exports__.isMfRemoteEntryAsset;
96
+ exports.resolveMfAssetCacheHeaders = __webpack_exports__.resolveMfAssetCacheHeaders;
97
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
98
+ "getRequestPathname",
99
+ "injectMfAssetCacheHeadersPlugin",
100
+ "isMfManifestAsset",
101
+ "isMfRemoteEntryAsset",
102
+ "resolveMfAssetCacheHeaders"
103
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
104
+ Object.defineProperty(exports, '__esModule', {
105
+ value: true
106
+ });
@@ -0,0 +1,285 @@
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
+ collectDirectRemoteModuleFederationCss: ()=>collectDirectRemoteModuleFederationCss,
41
+ collectDirectRemoteModuleFederationCssWithMeta: ()=>collectDirectRemoteModuleFederationCssWithMeta,
42
+ collectModuleFederationManifestCss: ()=>collectModuleFederationManifestCss,
43
+ createModuleFederationCssCollector: ()=>createModuleFederationCssCollector,
44
+ injectModuleFederationCssPlugin: ()=>injectModuleFederationCssPlugin
45
+ });
46
+ const fileReader_namespaceObject = require("@modern-js/runtime-utils/fileReader");
47
+ const utils_namespaceObject = require("@modern-js/utils");
48
+ const external_path_namespaceObject = require("path");
49
+ var external_path_default = /*#__PURE__*/ __webpack_require__.n(external_path_namespaceObject);
50
+ const MODULE_FEDERATION_MANIFEST_FILE = 'mf-manifest.json';
51
+ const DEFAULT_REMOTE_MANIFEST_TIMEOUT = 1500;
52
+ const warn = (monitors, message, ...args)=>{
53
+ if (monitors) return void monitors.warn(message, ...args);
54
+ console.warn(message, ...args);
55
+ };
56
+ const ensureTrailingSlash = (value)=>value.endsWith('/') ? value : `${value}/`;
57
+ const tryResolveUrl = (value, base)=>{
58
+ try {
59
+ return new URL(value, base).toString();
60
+ } catch {
61
+ return;
62
+ }
63
+ };
64
+ const normalizeRemoteEntry = (entry)=>{
65
+ const value = entry.trim();
66
+ if (!value) return;
67
+ const atIndex = value.lastIndexOf('@');
68
+ return atIndex >= 0 ? value.slice(atIndex + 1) : value;
69
+ };
70
+ const getCssAssets = (assets)=>[
71
+ ...assets?.css?.sync || [],
72
+ ...assets?.css?.async || []
73
+ ];
74
+ const getManifestFallbackBase = (manifestUrl)=>{
75
+ try {
76
+ return new URL('.', manifestUrl).toString();
77
+ } catch {
78
+ return ensureTrailingSlash(manifestUrl);
79
+ }
80
+ };
81
+ const getManifestPublicPathBase = (publicPath, manifestUrl)=>{
82
+ if (!publicPath || 'auto' === publicPath) return getManifestFallbackBase(manifestUrl);
83
+ const base = tryResolveUrl(ensureTrailingSlash(publicPath), manifestUrl);
84
+ return base || getManifestFallbackBase(manifestUrl);
85
+ };
86
+ const appendResolvedCssAssets = (result, seen, assets, base)=>{
87
+ for (const asset of assets){
88
+ if (!asset) continue;
89
+ const resolved = tryResolveUrl(asset, base);
90
+ if (resolved && !seen.has(resolved)) {
91
+ seen.add(resolved);
92
+ result.push(resolved);
93
+ }
94
+ }
95
+ };
96
+ const collectModuleFederationManifestCss = (manifest, manifestUrl)=>{
97
+ const base = getManifestPublicPathBase(manifest.metaData?.publicPath, manifestUrl);
98
+ const result = [];
99
+ const seen = new Set();
100
+ for (const item of manifest.shared || [])appendResolvedCssAssets(result, seen, getCssAssets(item.assets), base);
101
+ for (const item of manifest.exposes || [])appendResolvedCssAssets(result, seen, getCssAssets(item.assets), base);
102
+ return result;
103
+ };
104
+ const fetchJsonWithTimeout = async (url, fetcher, timeout)=>{
105
+ const controller = new AbortController();
106
+ let timeoutId;
107
+ try {
108
+ const response = await Promise.race([
109
+ fetcher(url, {
110
+ signal: controller.signal
111
+ }),
112
+ new Promise((_, reject)=>{
113
+ timeoutId = setTimeout(()=>{
114
+ controller.abort();
115
+ reject(new Error(`Request timed out after ${timeout}ms`));
116
+ }, timeout);
117
+ })
118
+ ]);
119
+ if (!response.ok) throw new Error(`Unexpected status ${response.status}`);
120
+ return await response.json();
121
+ } finally{
122
+ if (timeoutId) clearTimeout(timeoutId);
123
+ }
124
+ };
125
+ const getHostManifest = async (pwd, monitors)=>{
126
+ const manifestPath = external_path_default().join(pwd, MODULE_FEDERATION_MANIFEST_FILE);
127
+ if (!await utils_namespaceObject.fs.pathExists(manifestPath)) return;
128
+ const manifestBuffer = await fileReader_namespaceObject.fileReader.readFileFromSystem(manifestPath, 'buffer');
129
+ if (null === manifestBuffer) return;
130
+ try {
131
+ return JSON.parse(manifestBuffer.toString('utf-8'));
132
+ } catch (error) {
133
+ warn(monitors, 'Parse module federation manifest failed, error = %s', error instanceof Error ? error.message : error);
134
+ return;
135
+ }
136
+ };
137
+ const collectDirectRemoteModuleFederationCssWithMeta = async (pwd, options = {})=>{
138
+ const hostManifest = await getHostManifest(pwd, options.monitors);
139
+ if (!hostManifest) return {
140
+ assets: [],
141
+ errored: false
142
+ };
143
+ const fetcher = options.fetcher || globalThis.fetch?.bind(globalThis);
144
+ if (!fetcher) {
145
+ warn(options.monitors, 'Skip module federation remote CSS collection because fetch is unavailable.');
146
+ return {
147
+ assets: [],
148
+ errored: false
149
+ };
150
+ }
151
+ const timeout = options.timeout ?? DEFAULT_REMOTE_MANIFEST_TIMEOUT;
152
+ const remoteResults = await Promise.all((hostManifest.remotes || []).map(async (remote)=>{
153
+ if (!remote.entry) return {
154
+ assets: [],
155
+ errored: false
156
+ };
157
+ const remoteEntry = normalizeRemoteEntry(remote.entry);
158
+ if (!remoteEntry) return {
159
+ assets: [],
160
+ errored: false
161
+ };
162
+ let remoteManifestUrl;
163
+ try {
164
+ remoteManifestUrl = new URL(remoteEntry).toString();
165
+ } catch {
166
+ warn(options.monitors, 'Skip module federation remote CSS collection for non-absolute manifest URL %s', remoteEntry);
167
+ return {
168
+ assets: [],
169
+ errored: false
170
+ };
171
+ }
172
+ try {
173
+ const remoteManifest = await fetchJsonWithTimeout(remoteManifestUrl, fetcher, timeout);
174
+ return {
175
+ assets: collectModuleFederationManifestCss(remoteManifest, remoteManifestUrl),
176
+ errored: false
177
+ };
178
+ } catch (error) {
179
+ warn(options.monitors, 'Load module federation remote manifest %s failed, error = %s', remoteManifestUrl, error instanceof Error ? error.message : error);
180
+ return {
181
+ assets: [],
182
+ errored: true
183
+ };
184
+ }
185
+ }));
186
+ const cssAssets = [];
187
+ const seen = new Set();
188
+ let errored = false;
189
+ for (const result of remoteResults){
190
+ errored = errored || result.errored;
191
+ for (const asset of result.assets)if (!seen.has(asset)) {
192
+ seen.add(asset);
193
+ cssAssets.push(asset);
194
+ }
195
+ }
196
+ return {
197
+ assets: cssAssets,
198
+ errored
199
+ };
200
+ };
201
+ const collectDirectRemoteModuleFederationCss = async (pwd, options = {})=>{
202
+ const { assets } = await collectDirectRemoteModuleFederationCssWithMeta(pwd, options);
203
+ return assets;
204
+ };
205
+ const createModuleFederationCssCollector = (pwd, options = {})=>{
206
+ const { ttlMs = 0, now = Date.now, ...collectOptions } = options;
207
+ const normalizedTtlMs = Math.max(0, ttlMs);
208
+ let cached;
209
+ let lastGoodAssets;
210
+ let inflight;
211
+ const refresh = (monitors)=>{
212
+ const promise = collectDirectRemoteModuleFederationCssWithMeta(pwd, {
213
+ ...collectOptions,
214
+ monitors: monitors ?? collectOptions.monitors
215
+ }).then((result)=>{
216
+ if (!result.errored) {
217
+ lastGoodAssets = result.assets;
218
+ cached = {
219
+ assets: result.assets,
220
+ expiresAt: now() + normalizedTtlMs
221
+ };
222
+ return result.assets;
223
+ }
224
+ cached = void 0;
225
+ return lastGoodAssets ?? result.assets;
226
+ }).finally(()=>{
227
+ if (inflight === promise) inflight = void 0;
228
+ });
229
+ inflight = promise;
230
+ return promise;
231
+ };
232
+ return {
233
+ collect (monitors) {
234
+ if (cached && now() < cached.expiresAt) return Promise.resolve(cached.assets);
235
+ if (inflight) return inflight;
236
+ return refresh(monitors);
237
+ }
238
+ };
239
+ };
240
+ const DEFAULT_REMOTE_CSS_CACHE_TTL_MS = 30000;
241
+ const injectModuleFederationCssPlugin = (options = {})=>({
242
+ name: '@modern-js/inject-module-federation-css',
243
+ setup (api) {
244
+ api.onPrepare(()=>{
245
+ const { middlewares, distDirectory: pwd } = api.getServerContext();
246
+ if (!pwd) return;
247
+ const ttlMs = Math.max(0, options.remoteCssCacheTtlMs ?? ((0, utils_namespaceObject.isProd)() ? DEFAULT_REMOTE_CSS_CACHE_TTL_MS : 0));
248
+ const collector = createModuleFederationCssCollector(pwd, {
249
+ ttlMs
250
+ });
251
+ if ((0, utils_namespaceObject.isProd)()) collector.collect().catch(()=>{});
252
+ const handler = async (c, next)=>{
253
+ const serverManifest = c.get('serverManifest');
254
+ if (serverManifest && !serverManifest.moduleFederationCssAssets) {
255
+ const monitors = c.get('monitors');
256
+ const moduleFederationCssAssets = await collector.collect(monitors);
257
+ c.set('serverManifest', {
258
+ ...serverManifest,
259
+ moduleFederationCssAssets
260
+ });
261
+ }
262
+ await next();
263
+ };
264
+ middlewares.push({
265
+ name: 'inject-module-federation-css',
266
+ handler
267
+ });
268
+ });
269
+ }
270
+ });
271
+ exports.collectDirectRemoteModuleFederationCss = __webpack_exports__.collectDirectRemoteModuleFederationCss;
272
+ exports.collectDirectRemoteModuleFederationCssWithMeta = __webpack_exports__.collectDirectRemoteModuleFederationCssWithMeta;
273
+ exports.collectModuleFederationManifestCss = __webpack_exports__.collectModuleFederationManifestCss;
274
+ exports.createModuleFederationCssCollector = __webpack_exports__.createModuleFederationCssCollector;
275
+ exports.injectModuleFederationCssPlugin = __webpack_exports__.injectModuleFederationCssPlugin;
276
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
277
+ "collectDirectRemoteModuleFederationCss",
278
+ "collectDirectRemoteModuleFederationCssWithMeta",
279
+ "collectModuleFederationManifestCss",
280
+ "createModuleFederationCssCollector",
281
+ "injectModuleFederationCssPlugin"
282
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
283
+ Object.defineProperty(exports, '__esModule', {
284
+ value: true
285
+ });