@bleedingdev/modern-js-create 3.5.0-ultramodern.3 → 3.5.0-ultramodern.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -17
- package/dist/cjs/ultramodern-tooling/commands.cjs +772 -75
- package/dist/cjs/ultramodern-tooling/config.cjs +149 -8
- package/dist/cjs/ultramodern-workspace/add-vertical.cjs +25 -0
- package/dist/cjs/ultramodern-workspace/api.cjs +44 -0
- package/dist/cjs/ultramodern-workspace/app-files.cjs +8 -11
- package/dist/cjs/ultramodern-workspace/backend-federation.cjs +282 -0
- package/dist/cjs/ultramodern-workspace/contracts.cjs +24 -8
- package/dist/cjs/ultramodern-workspace/delivery-unit-sync.cjs +157 -0
- package/dist/cjs/ultramodern-workspace/delivery-unit.cjs +88 -0
- package/dist/cjs/ultramodern-workspace/descriptors.cjs +24 -0
- package/dist/cjs/ultramodern-workspace/module-federation.cjs +161 -50
- package/dist/cjs/ultramodern-workspace/package-json.cjs +26 -43
- package/dist/cjs/ultramodern-workspace/pnpm-workspace-policy-plan.cjs +166 -0
- package/dist/cjs/ultramodern-workspace/tooling-command-catalog.cjs +153 -0
- package/dist/cjs/ultramodern-workspace/versions.cjs +8 -3
- package/dist/cjs/ultramodern-workspace/workspace-script-plan.cjs +175 -0
- package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +104 -63
- package/dist/cjs/ultramodern-workspace/workspace-validation-contract.cjs +97 -0
- package/dist/cjs/ultramodern-workspace/write-workspace.cjs +11 -3
- package/dist/cjs/ultramodern-workspace/zerops.cjs +100 -0
- package/dist/esm/ultramodern-tooling/commands.js +775 -78
- package/dist/esm/ultramodern-tooling/config.js +144 -9
- package/dist/esm/ultramodern-workspace/add-vertical.js +26 -1
- package/dist/esm/ultramodern-workspace/api.js +43 -2
- package/dist/esm/ultramodern-workspace/app-files.js +8 -11
- package/dist/esm/ultramodern-workspace/backend-federation.js +217 -0
- package/dist/esm/ultramodern-workspace/contracts.js +24 -8
- package/dist/esm/ultramodern-workspace/delivery-unit-sync.js +108 -0
- package/dist/esm/ultramodern-workspace/delivery-unit.js +31 -0
- package/dist/esm/ultramodern-workspace/descriptors.js +13 -1
- package/dist/esm/ultramodern-workspace/module-federation.js +160 -42
- package/dist/esm/ultramodern-workspace/package-json.js +16 -40
- package/dist/esm/ultramodern-workspace/pnpm-workspace-policy-plan.js +113 -0
- package/dist/esm/ultramodern-workspace/tooling-command-catalog.js +100 -0
- package/dist/esm/ultramodern-workspace/versions.js +6 -4
- package/dist/esm/ultramodern-workspace/workspace-script-plan.js +110 -0
- package/dist/esm/ultramodern-workspace/workspace-scripts.js +88 -65
- package/dist/esm/ultramodern-workspace/workspace-validation-contract.js +59 -0
- package/dist/esm/ultramodern-workspace/write-workspace.js +14 -6
- package/dist/esm/ultramodern-workspace/zerops.js +62 -0
- package/dist/esm-node/ultramodern-tooling/commands.js +775 -78
- package/dist/esm-node/ultramodern-tooling/config.js +144 -9
- package/dist/esm-node/ultramodern-workspace/add-vertical.js +26 -1
- package/dist/esm-node/ultramodern-workspace/api.js +43 -2
- package/dist/esm-node/ultramodern-workspace/app-files.js +8 -11
- package/dist/esm-node/ultramodern-workspace/backend-federation.js +218 -0
- package/dist/esm-node/ultramodern-workspace/contracts.js +24 -8
- package/dist/esm-node/ultramodern-workspace/delivery-unit-sync.js +109 -0
- package/dist/esm-node/ultramodern-workspace/delivery-unit.js +32 -0
- package/dist/esm-node/ultramodern-workspace/descriptors.js +13 -1
- package/dist/esm-node/ultramodern-workspace/module-federation.js +160 -42
- package/dist/esm-node/ultramodern-workspace/package-json.js +16 -40
- package/dist/esm-node/ultramodern-workspace/pnpm-workspace-policy-plan.js +114 -0
- package/dist/esm-node/ultramodern-workspace/tooling-command-catalog.js +101 -0
- package/dist/esm-node/ultramodern-workspace/versions.js +6 -4
- package/dist/esm-node/ultramodern-workspace/workspace-script-plan.js +111 -0
- package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +88 -65
- package/dist/esm-node/ultramodern-workspace/workspace-validation-contract.js +60 -0
- package/dist/esm-node/ultramodern-workspace/write-workspace.js +14 -6
- package/dist/esm-node/ultramodern-workspace/zerops.js +63 -0
- package/dist/types/ultramodern-tooling/config.d.ts +6 -0
- package/dist/types/ultramodern-workspace/api.d.ts +1 -0
- package/dist/types/ultramodern-workspace/backend-federation.d.ts +11 -0
- package/dist/types/ultramodern-workspace/contracts.d.ts +1 -1
- package/dist/types/ultramodern-workspace/delivery-unit-sync.d.ts +6 -0
- package/dist/types/ultramodern-workspace/delivery-unit.d.ts +27 -0
- package/dist/types/ultramodern-workspace/descriptors.d.ts +4 -0
- package/dist/types/ultramodern-workspace/module-federation.d.ts +4 -9
- package/dist/types/ultramodern-workspace/package-json.d.ts +0 -1
- package/dist/types/ultramodern-workspace/pnpm-workspace-policy-plan.d.ts +39 -0
- package/dist/types/ultramodern-workspace/tooling-command-catalog.d.ts +18 -0
- package/dist/types/ultramodern-workspace/versions.d.ts +5 -3
- package/dist/types/ultramodern-workspace/workspace-script-plan.d.ts +72 -0
- package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +13 -0
- package/dist/types/ultramodern-workspace/workspace-validation-contract.d.ts +42 -0
- package/dist/types/ultramodern-workspace/zerops.d.ts +2 -0
- package/package.json +3 -3
- package/template-workspace/.gitignore.handlebars +4 -0
- package/template-workspace/README.md.handlebars +18 -15
- package/template-workspace/patches/@module-federation__bridge-react@2.6.0.patch +140 -0
- package/template-workspace/patches/@module-federation__modern-js-v3@2.6.0.patch +57 -0
- package/template-workspace/patches/drizzle-orm-ts7-strict-declarations.patch +452 -0
- package/template-workspace/patches/effect-schema-error-type-id.patch +18 -0
- package/template-workspace/pnpm-workspace.yaml.handlebars +8 -0
- package/template-workspace/scripts/bootstrap-agent-skills.mjs +11 -3
- package/templates/workspace-scripts/check-ultramodern-api-boundaries.mts +40 -2
- package/templates/workspace-scripts/generate-node-backend-federation.mjs +270 -0
- package/templates/workspace-scripts/materialize-zerops-runtime.mjs +448 -0
- package/templates/workspace-scripts/proof-cloudflare-version.mjs +237 -9
- package/templates/workspace-scripts/proof-node-backend-federation.mjs +729 -0
- package/templates/workspace-scripts/ultramodern-cloudflare-proof.mjs +188 -2
- package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +434 -18
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
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
3
|
(()=>{
|
|
13
4
|
__webpack_require__.d = (exports1, getters, values)=>{
|
|
14
5
|
var define = (defs, kind)=>{
|
|
@@ -38,7 +29,8 @@ var __webpack_exports__ = {};
|
|
|
38
29
|
__webpack_require__.r(__webpack_exports__);
|
|
39
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
40
31
|
createAppModernConfig: ()=>createAppModernConfig,
|
|
41
|
-
|
|
32
|
+
createBackendModuleFederationConfig: ()=>createBackendModuleFederationConfig,
|
|
33
|
+
createBuildMarker: ()=>external_delivery_unit_cjs_namespaceObject.createBuildMarker,
|
|
42
34
|
createModuleFederationRemoteUrlHelpers: ()=>createModuleFederationRemoteUrlHelpers,
|
|
43
35
|
createModuleFederationRemotesConfig: ()=>createModuleFederationRemotesConfig,
|
|
44
36
|
createRemoteModuleFederationConfig: ()=>createRemoteModuleFederationConfig,
|
|
@@ -48,14 +40,14 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
48
40
|
createUltramodernBuildReexportModule: ()=>createUltramodernBuildReexportModule,
|
|
49
41
|
formatTsObjectLiteral: ()=>formatTsObjectLiteral
|
|
50
42
|
});
|
|
51
|
-
const
|
|
52
|
-
|
|
43
|
+
const external_backend_federation_cjs_namespaceObject = require("./backend-federation.cjs");
|
|
44
|
+
const external_delivery_unit_cjs_namespaceObject = require("./delivery-unit.cjs");
|
|
53
45
|
const external_descriptors_cjs_namespaceObject = require("./descriptors.cjs");
|
|
54
46
|
const external_naming_cjs_namespaceObject = require("./naming.cjs");
|
|
55
47
|
const external_policy_cjs_namespaceObject = require("./policy.cjs");
|
|
56
48
|
const external_types_cjs_namespaceObject = require("./types.cjs");
|
|
57
49
|
const external_versions_cjs_namespaceObject = require("./versions.cjs");
|
|
58
|
-
function createAppModernConfig(scope, app) {
|
|
50
|
+
function createAppModernConfig(scope, app, remotes = []) {
|
|
59
51
|
const bffImport = (0, external_descriptors_cjs_namespaceObject.appHasApi)(app) ? "import { bffPlugin } from '@modern-js/plugin-bff';\n" : '';
|
|
60
52
|
const bffConfig = (0, external_descriptors_cjs_namespaceObject.appHasApi)(app) ? ` bff: {
|
|
61
53
|
effect: {
|
|
@@ -70,12 +62,30 @@ function createAppModernConfig(scope, app) {
|
|
|
70
62
|
},
|
|
71
63
|
` : '';
|
|
72
64
|
const bffPluginEntry = (0, external_descriptors_cjs_namespaceObject.appHasApi)(app) ? ' bffPlugin(),\n' : '';
|
|
65
|
+
const serviceBindings = 'shell' === app.kind ? remotes.filter(external_descriptors_cjs_namespaceObject.appHasApi) : [];
|
|
66
|
+
const serviceBindingsConfig = serviceBindings.length > 0 ? ` services: [
|
|
67
|
+
${serviceBindings.map((service)=>` {
|
|
68
|
+
binding:
|
|
69
|
+
envValue('${(0, external_backend_federation_cjs_namespaceObject.createWorkerBindingEnv)(service)}') ??
|
|
70
|
+
'${(0, external_backend_federation_cjs_namespaceObject.createWorkerBindingName)(service)}',
|
|
71
|
+
prefix: '${(0, external_descriptors_cjs_namespaceObject.resolveApiPrefix)(service)}',
|
|
72
|
+
service:
|
|
73
|
+
envValue('${(0, external_backend_federation_cjs_namespaceObject.createDispatchWorkerNameEnv)(service)}') ??
|
|
74
|
+
'${(0, external_descriptors_cjs_namespaceObject.createCloudflareWorkerName)(scope, service)}',
|
|
75
|
+
},`).join('\n')}
|
|
76
|
+
],
|
|
77
|
+
` : '';
|
|
73
78
|
const defaultAssetPrefixSource = 'shell' === app.kind ? "const defaultAssetPrefix = '/';" : `const remoteAssetOrigin =
|
|
74
79
|
configuredCloudflareUrl ||
|
|
75
80
|
inferredCloudflareUrl ||
|
|
76
81
|
(cloudflareDeployEnabled ? '/' : \`http://localhost:\${port}\`);
|
|
77
82
|
const defaultRemoteAssetPrefix = \`\${remoteAssetOrigin.replace(/\\/+$/u, '')}/\`;
|
|
78
83
|
const defaultAssetPrefix = defaultRemoteAssetPrefix;`;
|
|
84
|
+
const devAssetPrefixSource = 'shell' === app.kind ? ` // Keep shell dev assets origin-relative so the shell works through
|
|
85
|
+
// tunnels and local previews without rewriting its own chunks.
|
|
86
|
+
assetPrefix: '/',` : ` // Remote dev manifests must publish an absolute publicPath so host
|
|
87
|
+
// shells load remoteEntry.js and exposed chunks from this dev server.
|
|
88
|
+
assetPrefix,`;
|
|
79
89
|
return `// @effect-diagnostics processEnv:off
|
|
80
90
|
import {
|
|
81
91
|
appTools,
|
|
@@ -94,6 +104,22 @@ const zephyrEnabled = process.env['ULTRAMODERN_ZEPHYR'] !== 'false';
|
|
|
94
104
|
const cloudflareDeployEnabled =
|
|
95
105
|
process.env['MODERNJS_DEPLOY'] === 'cloudflare';
|
|
96
106
|
|
|
107
|
+
const parsedZephyrTimeoutMs = Number.parseInt(
|
|
108
|
+
process.env['ULTRAMODERN_ZEPHYR_TIMEOUT_MS'] ?? '',
|
|
109
|
+
10,
|
|
110
|
+
);
|
|
111
|
+
const zephyrTimeoutMs =
|
|
112
|
+
Number.isFinite(parsedZephyrTimeoutMs) && parsedZephyrTimeoutMs > 0
|
|
113
|
+
? parsedZephyrTimeoutMs
|
|
114
|
+
: 45000;
|
|
115
|
+
|
|
116
|
+
const zephyrWarn = (error: unknown) => {
|
|
117
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
118
|
+
console.warn(
|
|
119
|
+
\`[ultramodern] zephyr-rspack-plugin failed; continuing without Zephyr (set ULTRAMODERN_ZEPHYR=false to disable it): \${message}\`,
|
|
120
|
+
);
|
|
121
|
+
};
|
|
122
|
+
|
|
97
123
|
const zephyrRspackPlugin = () => ({
|
|
98
124
|
name: 'ultramodern-zephyr-rspack-plugin',
|
|
99
125
|
pre: ['@modern-js/plugin-module-federation-config'],
|
|
@@ -107,7 +133,34 @@ const zephyrRspackPlugin = () => ({
|
|
|
107
133
|
if (!zephyrEnabled) {
|
|
108
134
|
return;
|
|
109
135
|
}
|
|
110
|
-
api.modifyRspackConfig(config =>
|
|
136
|
+
api.modifyRspackConfig(config => {
|
|
137
|
+
try {
|
|
138
|
+
// Zephyr can not only throw/reject but also hang on a stalled network
|
|
139
|
+
// call, wedging the whole build. Race it against a watchdog so a hang
|
|
140
|
+
// degrades to an unmodified config instead of blocking indefinitely.
|
|
141
|
+
const zephyrConfig = Promise.resolve(withZephyrRspack()(config)).catch(
|
|
142
|
+
error => {
|
|
143
|
+
zephyrWarn(error);
|
|
144
|
+
return config;
|
|
145
|
+
},
|
|
146
|
+
);
|
|
147
|
+
const watchdog = new Promise<ZephyrRspackConfig>(resolve => {
|
|
148
|
+
const timer = setTimeout(() => {
|
|
149
|
+
zephyrWarn(
|
|
150
|
+
\`timed out after \${zephyrTimeoutMs}ms (override with ULTRAMODERN_ZEPHYR_TIMEOUT_MS)\`,
|
|
151
|
+
);
|
|
152
|
+
resolve(config);
|
|
153
|
+
}, zephyrTimeoutMs);
|
|
154
|
+
if (typeof timer.unref === 'function') {
|
|
155
|
+
timer.unref();
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
return Promise.race([zephyrConfig, watchdog]);
|
|
159
|
+
} catch (error) {
|
|
160
|
+
zephyrWarn(error);
|
|
161
|
+
return config;
|
|
162
|
+
}
|
|
163
|
+
});
|
|
111
164
|
},
|
|
112
165
|
});
|
|
113
166
|
|
|
@@ -144,8 +197,10 @@ ${defaultAssetPrefixSource}
|
|
|
144
197
|
// load remoteEntry.js and exposed chunks from the remote origin, not the host.
|
|
145
198
|
const assetPrefix =
|
|
146
199
|
configuredModernAssetPrefix || configuredUltramodernAssetPrefix || defaultAssetPrefix;
|
|
147
|
-
const
|
|
148
|
-
const
|
|
200
|
+
const buildTarget = cloudflareDeployEnabled ? 'cloudflare' : 'web';
|
|
201
|
+
const buildOutputRoot = cloudflareDeployEnabled ? 'dist-cloudflare' : 'dist';
|
|
202
|
+
const buildTempDirectory = \`node_modules/.modern-js-\${appId}-\${buildTarget}\`;
|
|
203
|
+
const buildCacheDirectory = \`node_modules/.cache/rspack-\${appId}-\${buildTarget}\`;
|
|
149
204
|
|
|
150
205
|
if (
|
|
151
206
|
cloudflareDeployEnabled &&
|
|
@@ -166,18 +221,16 @@ ${bffConfig} ...(cloudflareDeployEnabled
|
|
|
166
221
|
? {
|
|
167
222
|
deploy: {
|
|
168
223
|
worker: {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
},
|
|
224
|
+
compatibilityDate: '${external_versions_cjs_namespaceObject.CLOUDFLARE_COMPATIBILITY_DATE}',
|
|
225
|
+
name: cloudflareWorkerName,
|
|
226
|
+
security: ${(0, external_policy_cjs_namespaceObject.formatTsJsonValue)((0, external_types_cjs_namespaceObject.sortJsonValue)((0, external_policy_cjs_namespaceObject.createCloudflareSecurityContract)()), 16)},
|
|
227
|
+
${serviceBindingsConfig} ssr: true,
|
|
174
228
|
},
|
|
229
|
+
},
|
|
175
230
|
}
|
|
176
231
|
: {}),
|
|
177
232
|
dev: {
|
|
178
|
-
|
|
179
|
-
// http://localhost:<port> prefix breaks pages served through tunnels.
|
|
180
|
-
assetPrefix: '/',
|
|
233
|
+
${devAssetPrefixSource}
|
|
181
234
|
},
|
|
182
235
|
html: {
|
|
183
236
|
outputStructure: 'flat',
|
|
@@ -187,13 +240,15 @@ ${bffConfig} ...(cloudflareDeployEnabled
|
|
|
187
240
|
disableTsChecker: false,
|
|
188
241
|
distPath: {
|
|
189
242
|
html: './',
|
|
243
|
+
root: buildOutputRoot,
|
|
190
244
|
},
|
|
191
245
|
polyfill: 'off',
|
|
192
246
|
splitRouteChunks: true,
|
|
247
|
+
tempDir: buildTempDirectory,
|
|
193
248
|
},
|
|
194
249
|
performance: {
|
|
195
250
|
buildCache: {
|
|
196
|
-
cacheDigest: [appId,
|
|
251
|
+
cacheDigest: [appId, buildTarget],
|
|
197
252
|
cacheDirectory: buildCacheDirectory,
|
|
198
253
|
},
|
|
199
254
|
rsdoctor: {
|
|
@@ -390,6 +445,19 @@ ${remoteEntries}
|
|
|
390
445
|
},
|
|
391
446
|
`;
|
|
392
447
|
}
|
|
448
|
+
function createModuleFederationDtsConfig(hasExposes) {
|
|
449
|
+
return hasExposes ? ` dts: {
|
|
450
|
+
displayErrorInTerminal: true,
|
|
451
|
+
generateTypes: {
|
|
452
|
+
compilerInstance: 'tsgo',
|
|
453
|
+
},
|
|
454
|
+
tsConfigPath: './tsconfig.mf-types.json',
|
|
455
|
+
},` : ` dts: {
|
|
456
|
+
consumeTypes: true,
|
|
457
|
+
generateTypes: false,
|
|
458
|
+
tsConfigPath: './tsconfig.mf-types.json',
|
|
459
|
+
},`;
|
|
460
|
+
}
|
|
393
461
|
function createShellModuleFederationConfig(scope, remotes = []) {
|
|
394
462
|
const shellHost = {
|
|
395
463
|
...external_descriptors_cjs_namespaceObject.shellApp,
|
|
@@ -418,13 +486,7 @@ const moduleFederationConfig: Parameters<
|
|
|
418
486
|
dev: {
|
|
419
487
|
disableDynamicRemoteTypeHints: true,
|
|
420
488
|
},
|
|
421
|
-
|
|
422
|
-
displayErrorInTerminal: true,
|
|
423
|
-
generateTypes: {
|
|
424
|
-
compilerInstance: 'tsgo',
|
|
425
|
-
},
|
|
426
|
-
tsConfigPath: './tsconfig.mf-types.json',
|
|
427
|
-
},
|
|
489
|
+
${createModuleFederationDtsConfig(false)}
|
|
428
490
|
filename: 'remoteEntry.js',
|
|
429
491
|
name: '${external_descriptors_cjs_namespaceObject.shellApp.mfName}',
|
|
430
492
|
${createModuleFederationRemotesConfig(scope, shellHost, remotes)}${createSharedModuleFederationConfig()},
|
|
@@ -434,25 +496,75 @@ ${createModuleFederationRemotesConfig(scope, shellHost, remotes)}${createSharedM
|
|
|
434
496
|
export default moduleFederationConfig;
|
|
435
497
|
`;
|
|
436
498
|
}
|
|
437
|
-
function
|
|
438
|
-
return
|
|
499
|
+
function createBackendModuleFederationConfig(app) {
|
|
500
|
+
return `// @effect-diagnostics nodeBuiltinImport:off
|
|
501
|
+
import { createRequire } from 'node:module';
|
|
502
|
+
import { createModuleFederationConfig } from '@module-federation/modern-js-v3';
|
|
503
|
+
import { dependencies } from './package.json';
|
|
504
|
+
|
|
505
|
+
const require = createRequire(import.meta.url);
|
|
506
|
+
const bffVersion = (
|
|
507
|
+
require('@modern-js/plugin-bff/package.json') as { version: string }
|
|
508
|
+
).version;
|
|
509
|
+
const effectVersion = (
|
|
510
|
+
require('effect/package.json') as { version: string }
|
|
511
|
+
).version;
|
|
512
|
+
|
|
513
|
+
const moduleFederationConfig: Parameters<
|
|
514
|
+
typeof createModuleFederationConfig
|
|
515
|
+
>[0] = createModuleFederationConfig({
|
|
516
|
+
dts: false,
|
|
517
|
+
exposes: {
|
|
518
|
+
'./effect-api': './api/effect-api.ts',
|
|
519
|
+
},
|
|
520
|
+
filename: 'backendRemoteEntry.mjs',
|
|
521
|
+
name: '${(0, external_descriptors_cjs_namespaceObject.createBackendFederationName)(app)}',
|
|
522
|
+
shared: {
|
|
523
|
+
'@modern-js/plugin-bff': {
|
|
524
|
+
requiredVersion: bffVersion,
|
|
525
|
+
singleton: true,
|
|
526
|
+
treeShaking: false,
|
|
527
|
+
},
|
|
528
|
+
'@module-federation/runtime': {
|
|
529
|
+
requiredVersion: dependencies['@module-federation/runtime'],
|
|
530
|
+
singleton: true,
|
|
531
|
+
treeShaking: false,
|
|
532
|
+
},
|
|
533
|
+
effect: {
|
|
534
|
+
requiredVersion: effectVersion,
|
|
535
|
+
singleton: true,
|
|
536
|
+
treeShaking: false,
|
|
537
|
+
},
|
|
538
|
+
},
|
|
539
|
+
treeShakingSharedExcludePlugins: ['RspackModuleFederationPlugin'],
|
|
540
|
+
});
|
|
541
|
+
|
|
542
|
+
export default moduleFederationConfig;
|
|
543
|
+
`;
|
|
439
544
|
}
|
|
440
545
|
function createUltramodernBuildModule(scope, app) {
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
546
|
+
const record = (0, external_delivery_unit_cjs_namespaceObject.createDeliveryUnitRecord)(scope, app);
|
|
547
|
+
return `export const ultramodernDeliveryUnit = {
|
|
548
|
+
appId: '${record.appId}',
|
|
549
|
+
build: '${record.buildMarker}',
|
|
550
|
+
deployProfile: '${record.deployProfile}',
|
|
551
|
+
kind: '${record.kind}',
|
|
552
|
+
packageName: '${record.packageName}',
|
|
553
|
+
schemaVersion: ${record.schemaVersion},
|
|
554
|
+
sourceRevision: '${record.sourceRevision}',
|
|
555
|
+
unitId: '${record.unitId}',
|
|
556
|
+
version: '${record.version}',
|
|
447
557
|
} as const;
|
|
448
558
|
|
|
559
|
+
export const ultramodernVerticalIdentity = ultramodernDeliveryUnit;
|
|
560
|
+
|
|
449
561
|
export const ultramodernUiMarker = {
|
|
450
|
-
...
|
|
562
|
+
...ultramodernDeliveryUnit,
|
|
451
563
|
surface: 'ui',
|
|
452
564
|
} as const;
|
|
453
565
|
|
|
454
566
|
export const ultramodernApiMarker = {
|
|
455
|
-
...
|
|
567
|
+
...ultramodernDeliveryUnit,
|
|
456
568
|
surface: 'api',
|
|
457
569
|
} as const;
|
|
458
570
|
`;
|
|
@@ -460,6 +572,7 @@ export const ultramodernApiMarker = {
|
|
|
460
572
|
function createUltramodernBuildReexportModule() {
|
|
461
573
|
return `export {
|
|
462
574
|
ultramodernApiMarker,
|
|
575
|
+
ultramodernDeliveryUnit,
|
|
463
576
|
ultramodernUiMarker,
|
|
464
577
|
ultramodernVerticalIdentity,
|
|
465
578
|
} from '../shared/ultramodern-build';
|
|
@@ -467,7 +580,9 @@ function createUltramodernBuildReexportModule() {
|
|
|
467
580
|
}
|
|
468
581
|
function createRemoteModuleFederationConfig(scope, app, remotes = []) {
|
|
469
582
|
const exposes = formatTsObjectLiteral(app.exposes ?? {});
|
|
470
|
-
|
|
583
|
+
const hasExposes = Object.keys(app.exposes ?? {}).length > 0;
|
|
584
|
+
const hostOnlyMarker = hasExposes ? '' : '\n// ultramodern-mf: no-exposes';
|
|
585
|
+
return `// @effect-diagnostics nodeBuiltinImport:off${hostOnlyMarker}
|
|
471
586
|
import { createRequire } from 'node:module';
|
|
472
587
|
import { createModuleFederationConfig } from '@module-federation/modern-js-v3';
|
|
473
588
|
import { dependencies } from './package.json';
|
|
@@ -489,13 +604,7 @@ const moduleFederationConfig: Parameters<
|
|
|
489
604
|
dev: {
|
|
490
605
|
disableDynamicRemoteTypeHints: true,
|
|
491
606
|
},
|
|
492
|
-
|
|
493
|
-
displayErrorInTerminal: true,
|
|
494
|
-
generateTypes: {
|
|
495
|
-
compilerInstance: 'tsgo',
|
|
496
|
-
},
|
|
497
|
-
tsConfigPath: './tsconfig.mf-types.json',
|
|
498
|
-
},
|
|
607
|
+
${createModuleFederationDtsConfig(hasExposes)}
|
|
499
608
|
exposes: ${exposes},
|
|
500
609
|
filename: 'remoteEntry.js',
|
|
501
610
|
name: '${app.mfName}',
|
|
@@ -507,6 +616,7 @@ export default moduleFederationConfig;
|
|
|
507
616
|
`;
|
|
508
617
|
}
|
|
509
618
|
exports.createAppModernConfig = __webpack_exports__.createAppModernConfig;
|
|
619
|
+
exports.createBackendModuleFederationConfig = __webpack_exports__.createBackendModuleFederationConfig;
|
|
510
620
|
exports.createBuildMarker = __webpack_exports__.createBuildMarker;
|
|
511
621
|
exports.createModuleFederationRemoteUrlHelpers = __webpack_exports__.createModuleFederationRemoteUrlHelpers;
|
|
512
622
|
exports.createModuleFederationRemotesConfig = __webpack_exports__.createModuleFederationRemotesConfig;
|
|
@@ -518,6 +628,7 @@ exports.createUltramodernBuildReexportModule = __webpack_exports__.createUltramo
|
|
|
518
628
|
exports.formatTsObjectLiteral = __webpack_exports__.formatTsObjectLiteral;
|
|
519
629
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
520
630
|
"createAppModernConfig",
|
|
631
|
+
"createBackendModuleFederationConfig",
|
|
521
632
|
"createBuildMarker",
|
|
522
633
|
"createModuleFederationRemoteUrlHelpers",
|
|
523
634
|
"createModuleFederationRemotesConfig",
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
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
|
+
})();
|
|
3
12
|
(()=>{
|
|
4
13
|
__webpack_require__.d = (exports1, getters, values)=>{
|
|
5
14
|
var define = (defs, kind)=>{
|
|
@@ -39,18 +48,18 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
39
48
|
createSharedContractsIndex: ()=>createSharedContractsIndex,
|
|
40
49
|
createSharedPackage: ()=>createSharedPackage,
|
|
41
50
|
createSharedPackageTsConfig: ()=>createSharedPackageTsConfig,
|
|
42
|
-
createStrictTsgoTypecheckCommand: ()=>createStrictTsgoTypecheckCommand,
|
|
43
51
|
createTsConfigBase: ()=>createTsConfigBase,
|
|
44
52
|
createZephyrDependencies: ()=>createZephyrDependencies,
|
|
45
53
|
effectDiagnostics: ()=>effectDiagnostics
|
|
46
54
|
});
|
|
55
|
+
const external_node_path_namespaceObject = require("node:path");
|
|
56
|
+
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
47
57
|
const external_ultramodern_package_source_cjs_namespaceObject = require("../ultramodern-package-source.cjs");
|
|
48
58
|
const external_descriptors_cjs_namespaceObject = require("./descriptors.cjs");
|
|
49
59
|
const external_fs_io_cjs_namespaceObject = require("./fs-io.cjs");
|
|
50
60
|
const external_naming_cjs_namespaceObject = require("./naming.cjs");
|
|
51
|
-
const external_public_surface_cjs_namespaceObject = require("./public-surface.cjs");
|
|
52
61
|
const external_versions_cjs_namespaceObject = require("./versions.cjs");
|
|
53
|
-
const
|
|
62
|
+
const external_workspace_script_plan_cjs_namespaceObject = require("./workspace-script-plan.cjs");
|
|
54
63
|
const effectDiagnostics = [
|
|
55
64
|
'anyUnknownInErrorContext',
|
|
56
65
|
'classSelfMismatch',
|
|
@@ -141,8 +150,7 @@ function appDependencies(scope, packageSource, app, remotes = [], bridge) {
|
|
|
141
150
|
[(0, external_naming_cjs_namespaceObject.packageName)(scope, 'shared-design-tokens')]: external_ultramodern_package_source_cjs_namespaceObject.WORKSPACE_PACKAGE_VERSION,
|
|
142
151
|
react: external_versions_cjs_namespaceObject.REACT_VERSION,
|
|
143
152
|
'react-dom': external_versions_cjs_namespaceObject.REACT_DOM_VERSION,
|
|
144
|
-
'react-router': external_versions_cjs_namespaceObject.REACT_ROUTER_VERSION
|
|
145
|
-
'react-router-dom': external_versions_cjs_namespaceObject.REACT_ROUTER_VERSION
|
|
153
|
+
'react-router': external_versions_cjs_namespaceObject.REACT_ROUTER_VERSION
|
|
146
154
|
};
|
|
147
155
|
for (const dependency of bridge?.dependencies ?? [])dependencies[dependency] = external_ultramodern_package_source_cjs_namespaceObject.WORKSPACE_PACKAGE_VERSION;
|
|
148
156
|
if ('shell' === app.kind) {
|
|
@@ -174,11 +182,6 @@ function appDevDependencies(packageSource, enableTailwind) {
|
|
|
174
182
|
function createRootPackageJson(scope, packageSource, remotes = [], bridge) {
|
|
175
183
|
const shellFilter = `--filter ${(0, external_naming_cjs_namespaceObject.packageName)(scope, external_descriptors_cjs_namespaceObject.shellApp.packageSuffix)}`;
|
|
176
184
|
const remoteFilters = remotes.map((remote)=>`--filter ${(0, external_naming_cjs_namespaceObject.packageName)(scope, remote.packageSuffix)}`);
|
|
177
|
-
const remoteBuildPrefix = remotes.length > 0 ? 'ULTRAMODERN_ZEPHYR=false pnpm -r --filter "./verticals/*" run build && ' : '';
|
|
178
|
-
const remoteCloudflareBuildPrefix = remotes.length > 0 ? 'pnpm -r --filter "./verticals/*" run cloudflare:build && ' : '';
|
|
179
|
-
const remoteCloudflareDeployPrefix = remotes.length > 0 ? 'pnpm -r --filter "./verticals/*" run cloudflare:deploy && ' : '';
|
|
180
|
-
const generatedPackageTypecheck = 'pnpm -r --filter "./apps/*" --filter "./verticals/*" --filter "./packages/*" run typecheck';
|
|
181
|
-
const typecheck = bridge ? generatedPackageTypecheck : "node ./scripts/ultramodern-typecheck.mts --build tsconfig.json";
|
|
182
185
|
const bridgeScripts = bridge ? {
|
|
183
186
|
...Object.fromEntries(bridge.gates.map((gate)=>[
|
|
184
187
|
`bridge:${gate.name}`,
|
|
@@ -187,6 +190,11 @@ function createRootPackageJson(scope, packageSource, remotes = [], bridge) {
|
|
|
187
190
|
'bridge:check': bridge.gates.map((gate)=>`pnpm run bridge:${gate.name}`).join(' && ')
|
|
188
191
|
} : {};
|
|
189
192
|
const bridgeCheck = bridge ? ' && pnpm bridge:check' : '';
|
|
193
|
+
const bridgeTypecheck = bridge ? 'pnpm -r --filter "./apps/*" --filter "./verticals/*" --filter "./packages/*" run typecheck' : void 0;
|
|
194
|
+
const rootPackageScripts = (0, external_workspace_script_plan_cjs_namespaceObject.createWorkspaceRootPackageScripts)(remotes, {
|
|
195
|
+
bridgeCheck,
|
|
196
|
+
typecheck: bridgeTypecheck
|
|
197
|
+
});
|
|
190
198
|
const workspacePackages = [
|
|
191
199
|
'apps/*',
|
|
192
200
|
'verticals/*',
|
|
@@ -209,28 +217,19 @@ function createRootPackageJson(scope, packageSource, remotes = [], bridge) {
|
|
|
209
217
|
`dev:${remote.packageSuffix}`,
|
|
210
218
|
`pnpm --filter ${(0, external_naming_cjs_namespaceObject.packageName)(scope, remote.packageSuffix)} dev`
|
|
211
219
|
])),
|
|
212
|
-
|
|
220
|
+
...rootPackageScripts,
|
|
213
221
|
format: "oxfmt . '!repos/**'",
|
|
214
222
|
'format:check': "oxfmt --check . '!repos/**'",
|
|
215
223
|
lint: 'oxlint apps verticals packages',
|
|
216
224
|
'lint:fix': 'oxlint apps verticals packages --fix',
|
|
217
|
-
typecheck,
|
|
218
|
-
'cloudflare:build': `${remoteCloudflareBuildPrefix}pnpm --filter "./apps/shell-super-app" run cloudflare:build && pnpm mf:types`,
|
|
219
|
-
'cloudflare:deploy': `${remoteCloudflareDeployPrefix}pnpm --filter "./apps/shell-super-app" run cloudflare:deploy`,
|
|
220
|
-
'cloudflare:proof': "node ./scripts/proof-cloudflare-version.mts --out .codex/reports/cloudflare-version-proof/public-url-proof.json",
|
|
221
225
|
'skills:install': "node ./scripts/bootstrap-agent-skills.mts",
|
|
222
226
|
'skills:check': "node ./scripts/bootstrap-agent-skills.mts --check",
|
|
223
227
|
'agents:refs:install': "node ./scripts/setup-agent-reference-repos.mts",
|
|
224
228
|
'agents:refs:check': "node ./scripts/setup-agent-reference-repos.mts --check",
|
|
225
|
-
'mf:types': "node ./scripts/assert-mf-types.mts",
|
|
226
|
-
'performance:readiness': "node ./scripts/ultramodern-performance-readiness.mts",
|
|
227
|
-
'migrate:strict-effect': "node ./scripts/migrate-strict-effect.mts",
|
|
228
|
-
'contract:check': "node ./scripts/validate-ultramodern-workspace.mts",
|
|
229
229
|
'api:check': "node ./scripts/check-ultramodern-api-boundaries.mts",
|
|
230
230
|
'i18n:boundaries': "node ./scripts/check-ultramodern-i18n-boundaries.mts",
|
|
231
231
|
...bridgeScripts,
|
|
232
|
-
postinstall: "oxfmt . '!repos/**' && node ./scripts/bootstrap-agent-skills.mts --postinstall"
|
|
233
|
-
check: `pnpm format:check && pnpm lint && pnpm typecheck && pnpm skills:check && pnpm i18n:boundaries && pnpm api:check && pnpm contract:check && pnpm performance:readiness${bridgeCheck}`
|
|
232
|
+
postinstall: "oxfmt . '!repos/**' && node ./scripts/bootstrap-agent-skills.mts --postinstall"
|
|
234
233
|
},
|
|
235
234
|
engines: {
|
|
236
235
|
node: '>=26',
|
|
@@ -251,6 +250,7 @@ function createRootPackageJson(scope, packageSource, remotes = [], bridge) {
|
|
|
251
250
|
'@effect/tsgo': external_versions_cjs_namespaceObject.EFFECT_TSGO_VERSION,
|
|
252
251
|
'@modern-js/code-tools': (0, external_ultramodern_package_source_cjs_namespaceObject.modernPackageSpecifier)('@modern-js/code-tools', packageSource),
|
|
253
252
|
'@modern-js/create': (0, external_ultramodern_package_source_cjs_namespaceObject.modernPackageSpecifier)('@modern-js/create', packageSource),
|
|
253
|
+
'@modern-js/plugin-bff': (0, external_ultramodern_package_source_cjs_namespaceObject.modernPackageSpecifier)('@modern-js/plugin-bff', packageSource),
|
|
254
254
|
"@typescript/native-preview": external_versions_cjs_namespaceObject.TYPESCRIPT_NATIVE_PREVIEW_VERSION,
|
|
255
255
|
lefthook: external_versions_cjs_namespaceObject.LEFTHOOK_VERSION,
|
|
256
256
|
oxlint: external_versions_cjs_namespaceObject.OXLINT_VERSION,
|
|
@@ -294,7 +294,6 @@ function createTsConfigBase() {
|
|
|
294
294
|
noFallthroughCasesInSwitch: true,
|
|
295
295
|
noPropertyAccessFromIndexSignature: true,
|
|
296
296
|
noImplicitReturns: true,
|
|
297
|
-
skipLibCheck: true,
|
|
298
297
|
resolveJsonModule: true,
|
|
299
298
|
plugins: [
|
|
300
299
|
{
|
|
@@ -326,7 +325,7 @@ function createReferences(packageDir, references) {
|
|
|
326
325
|
return [
|
|
327
326
|
...new Set(references)
|
|
328
327
|
].filter((reference)=>reference !== packageDir).map((reference)=>({
|
|
329
|
-
path:
|
|
328
|
+
path: external_node_path_default().relative(packageDir, reference).split(external_node_path_default().sep).join('/')
|
|
330
329
|
}));
|
|
331
330
|
}
|
|
332
331
|
function createPackageTsConfig(packageDir, options = {}) {
|
|
@@ -336,8 +335,6 @@ function createPackageTsConfig(packageDir, options = {}) {
|
|
|
336
335
|
const include = resolvedOptions.include ?? [
|
|
337
336
|
'src',
|
|
338
337
|
'locales/**/*.json',
|
|
339
|
-
'modern.config.ts',
|
|
340
|
-
'module-federation.config.ts',
|
|
341
338
|
'package.json',
|
|
342
339
|
'shared'
|
|
343
340
|
];
|
|
@@ -371,9 +368,9 @@ function createAppTsConfig(app, remotes = []) {
|
|
|
371
368
|
});
|
|
372
369
|
}
|
|
373
370
|
function createAppMfTypesTsConfig(app) {
|
|
374
|
-
const exposedFiles = Object.
|
|
371
|
+
const exposedFiles = Object.entries(app.exposes ?? {}).sort(([left], [right])=>'./Route' === left ? -1 : './Route' === right ? 1 : 0).map(([, exposePath])=>exposePath.replace(/^\.\//u, ''));
|
|
375
372
|
return {
|
|
376
|
-
extends:
|
|
373
|
+
extends: `${(0, external_naming_cjs_namespaceObject.relativeRootFor)(app.directory)}/tsconfig.base.json`,
|
|
377
374
|
include: [
|
|
378
375
|
...new Set([
|
|
379
376
|
...exposedFiles,
|
|
@@ -403,9 +400,6 @@ function createRootTsConfig(apps = []) {
|
|
|
403
400
|
};
|
|
404
401
|
}
|
|
405
402
|
function createAppPackage(scope, app, packageSource, enableTailwind, remotes = [], bridge) {
|
|
406
|
-
const publicSurfaceBuildCommand = (0, external_public_surface_cjs_namespaceObject.createPublicSurfaceGenerationCommand)(app, 'dist');
|
|
407
|
-
const publicSurfaceCloudflareBuildCommand = (0, external_public_surface_cjs_namespaceObject.createPublicSurfaceGenerationCommand)(app, 'dist');
|
|
408
|
-
const publicSurfaceCloudflareOutputCommand = (0, external_public_surface_cjs_namespaceObject.createPublicSurfaceGenerationCommand)(app, 'cloudflare');
|
|
409
403
|
const packageExports = Object.fromEntries(Object.entries(app.exposes ?? {}).map(([expose, source])=>[
|
|
410
404
|
expose,
|
|
411
405
|
source
|
|
@@ -414,16 +408,7 @@ function createAppPackage(scope, app, packageSource, enableTailwind, remotes = [
|
|
|
414
408
|
private: true,
|
|
415
409
|
name: (0, external_naming_cjs_namespaceObject.packageName)(scope, app.packageSuffix),
|
|
416
410
|
version: '0.1.0',
|
|
417
|
-
scripts:
|
|
418
|
-
dev: 'modern dev',
|
|
419
|
-
build: app.exposes ? `ULTRAMODERN_ZEPHYR=false modern build && ${publicSurfaceBuildCommand} && node ${(0, external_naming_cjs_namespaceObject.relativeRootFor)(app.directory)}/scripts/assert-mf-types.mts` : `ULTRAMODERN_ZEPHYR=false modern build && ${publicSurfaceBuildCommand}`,
|
|
420
|
-
'cloudflare:build': `ULTRAMODERN_ZEPHYR=false MODERNJS_DEPLOY=cloudflare modern build && ${publicSurfaceCloudflareBuildCommand} && ULTRAMODERN_ZEPHYR=false MODERNJS_DEPLOY=cloudflare modern deploy && ${publicSurfaceCloudflareOutputCommand}`,
|
|
421
|
-
'cloudflare:deploy': 'ULTRAMODERN_CLOUDFLARE_REQUIRE_PUBLIC_URLS=true pnpm run cloudflare:build && wrangler deploy --config .output/wrangler.json',
|
|
422
|
-
'cloudflare:preview': 'pnpm run cloudflare:build && wrangler dev --config .output/wrangler.json',
|
|
423
|
-
'cloudflare:proof': `node ${(0, external_naming_cjs_namespaceObject.relativeRootFor)(app.directory)}/scripts/proof-cloudflare-version.mts --app ${app.id}`,
|
|
424
|
-
serve: 'modern serve',
|
|
425
|
-
typecheck: createStrictTsgoTypecheckCommand(app.directory)
|
|
426
|
-
},
|
|
411
|
+
scripts: (0, external_workspace_script_plan_cjs_namespaceObject.createWorkspaceAppPackageScripts)(app),
|
|
427
412
|
modernjs: {
|
|
428
413
|
preset: 'presetUltramodern',
|
|
429
414
|
role: 'shell' === app.kind ? 'shell' : 'module-federation-remote',
|
|
@@ -458,7 +443,7 @@ function createSharedPackage(scope, id, description) {
|
|
|
458
443
|
'.': './src/index.ts'
|
|
459
444
|
},
|
|
460
445
|
scripts: {
|
|
461
|
-
typecheck: createStrictTsgoTypecheckCommand(`packages/${id}`)
|
|
446
|
+
typecheck: (0, external_workspace_script_plan_cjs_namespaceObject.createStrictTsgoTypecheckCommand)(`packages/${id}`)
|
|
462
447
|
},
|
|
463
448
|
devDependencies: {
|
|
464
449
|
'@effect/tsgo': external_versions_cjs_namespaceObject.EFFECT_TSGO_VERSION,
|
|
@@ -485,7 +470,6 @@ exports.createRootTsConfig = __webpack_exports__.createRootTsConfig;
|
|
|
485
470
|
exports.createSharedContractsIndex = __webpack_exports__.createSharedContractsIndex;
|
|
486
471
|
exports.createSharedPackage = __webpack_exports__.createSharedPackage;
|
|
487
472
|
exports.createSharedPackageTsConfig = __webpack_exports__.createSharedPackageTsConfig;
|
|
488
|
-
exports.createStrictTsgoTypecheckCommand = __webpack_exports__.createStrictTsgoTypecheckCommand;
|
|
489
473
|
exports.createTsConfigBase = __webpack_exports__.createTsConfigBase;
|
|
490
474
|
exports.createZephyrDependencies = __webpack_exports__.createZephyrDependencies;
|
|
491
475
|
exports.effectDiagnostics = __webpack_exports__.effectDiagnostics;
|
|
@@ -501,7 +485,6 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
|
501
485
|
"createSharedContractsIndex",
|
|
502
486
|
"createSharedPackage",
|
|
503
487
|
"createSharedPackageTsConfig",
|
|
504
|
-
"createStrictTsgoTypecheckCommand",
|
|
505
488
|
"createTsConfigBase",
|
|
506
489
|
"createZephyrDependencies",
|
|
507
490
|
"effectDiagnostics"
|