@bleedingdev/modern-js-create 3.2.0-ultramodern.120 → 3.2.0-ultramodern.121

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 (118) hide show
  1. package/README.md +35 -12
  2. package/dist/cjs/create-package-root.cjs +7 -9
  3. package/dist/cjs/index.cjs +74 -44
  4. package/dist/cjs/locale/en.cjs +6 -7
  5. package/dist/cjs/locale/zh.cjs +6 -7
  6. package/dist/cjs/ultramodern-workspace/add-vertical.cjs +337 -0
  7. package/dist/cjs/ultramodern-workspace/app-files.cjs +223 -0
  8. package/dist/cjs/ultramodern-workspace/contracts.cjs +836 -0
  9. package/dist/cjs/ultramodern-workspace/demo-components.cjs +422 -0
  10. package/dist/cjs/ultramodern-workspace/descriptors.cjs +222 -0
  11. package/dist/cjs/ultramodern-workspace/effect-api.cjs +952 -0
  12. package/dist/cjs/ultramodern-workspace/fs-io.cjs +191 -0
  13. package/dist/cjs/ultramodern-workspace/index.cjs +48 -0
  14. package/dist/cjs/ultramodern-workspace/locales.cjs +173 -0
  15. package/dist/cjs/ultramodern-workspace/module-federation.cjs +487 -0
  16. package/dist/cjs/ultramodern-workspace/naming.cjs +161 -0
  17. package/dist/cjs/ultramodern-workspace/package-json.cjs +406 -0
  18. package/dist/cjs/ultramodern-workspace/package-source.cjs +59 -0
  19. package/dist/cjs/ultramodern-workspace/policy.cjs +248 -0
  20. package/dist/cjs/ultramodern-workspace/public-surface.cjs +268 -0
  21. package/dist/cjs/ultramodern-workspace/routes.cjs +375 -0
  22. package/dist/cjs/ultramodern-workspace/types.cjs +61 -0
  23. package/dist/cjs/ultramodern-workspace/versions.cjs +153 -0
  24. package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +153 -0
  25. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +175 -0
  26. package/dist/esm/create-package-root.js +7 -9
  27. package/dist/esm/index.js +72 -42
  28. package/dist/esm/locale/en.js +6 -7
  29. package/dist/esm/locale/zh.js +6 -7
  30. package/dist/esm/ultramodern-workspace/add-vertical.js +252 -0
  31. package/dist/esm/ultramodern-workspace/app-files.js +149 -0
  32. package/dist/esm/ultramodern-workspace/contracts.js +741 -0
  33. package/dist/esm/ultramodern-workspace/demo-components.js +363 -0
  34. package/dist/esm/ultramodern-workspace/descriptors.js +133 -0
  35. package/dist/esm/ultramodern-workspace/effect-api.js +854 -0
  36. package/dist/esm/ultramodern-workspace/fs-io.js +90 -0
  37. package/dist/esm/ultramodern-workspace/index.js +3 -0
  38. package/dist/esm/ultramodern-workspace/locales.js +122 -0
  39. package/dist/esm/ultramodern-workspace/module-federation.js +415 -0
  40. package/dist/esm/ultramodern-workspace/naming.js +71 -0
  41. package/dist/esm/ultramodern-workspace/package-json.js +338 -0
  42. package/dist/esm/ultramodern-workspace/package-source.js +21 -0
  43. package/dist/esm/ultramodern-workspace/policy.js +183 -0
  44. package/dist/esm/ultramodern-workspace/public-surface.js +183 -0
  45. package/dist/esm/ultramodern-workspace/routes.js +280 -0
  46. package/dist/esm/ultramodern-workspace/types.js +16 -0
  47. package/dist/esm/ultramodern-workspace/versions.js +34 -0
  48. package/dist/esm/ultramodern-workspace/workspace-scripts.js +91 -0
  49. package/dist/esm/ultramodern-workspace/write-workspace.js +121 -0
  50. package/dist/esm-node/create-package-root.js +7 -9
  51. package/dist/esm-node/index.js +72 -42
  52. package/dist/esm-node/locale/en.js +6 -7
  53. package/dist/esm-node/locale/zh.js +6 -7
  54. package/dist/esm-node/ultramodern-workspace/add-vertical.js +253 -0
  55. package/dist/esm-node/ultramodern-workspace/app-files.js +150 -0
  56. package/dist/esm-node/ultramodern-workspace/contracts.js +742 -0
  57. package/dist/esm-node/ultramodern-workspace/demo-components.js +364 -0
  58. package/dist/esm-node/ultramodern-workspace/descriptors.js +134 -0
  59. package/dist/esm-node/ultramodern-workspace/effect-api.js +855 -0
  60. package/dist/esm-node/ultramodern-workspace/fs-io.js +91 -0
  61. package/dist/esm-node/ultramodern-workspace/index.js +4 -0
  62. package/dist/esm-node/ultramodern-workspace/locales.js +123 -0
  63. package/dist/esm-node/ultramodern-workspace/module-federation.js +416 -0
  64. package/dist/esm-node/ultramodern-workspace/naming.js +72 -0
  65. package/dist/esm-node/ultramodern-workspace/package-json.js +339 -0
  66. package/dist/esm-node/ultramodern-workspace/package-source.js +22 -0
  67. package/dist/esm-node/ultramodern-workspace/policy.js +184 -0
  68. package/dist/esm-node/ultramodern-workspace/public-surface.js +184 -0
  69. package/dist/esm-node/ultramodern-workspace/routes.js +281 -0
  70. package/dist/esm-node/ultramodern-workspace/types.js +17 -0
  71. package/dist/esm-node/ultramodern-workspace/versions.js +35 -0
  72. package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +92 -0
  73. package/dist/esm-node/ultramodern-workspace/write-workspace.js +122 -0
  74. package/dist/types/locale/en.d.ts +4 -5
  75. package/dist/types/locale/index.d.ts +8 -10
  76. package/dist/types/locale/zh.d.ts +4 -5
  77. package/dist/types/ultramodern-workspace/add-vertical.d.ts +19 -0
  78. package/dist/types/ultramodern-workspace/app-files.d.ts +14 -0
  79. package/dist/types/ultramodern-workspace/contracts.d.ts +21 -0
  80. package/dist/types/ultramodern-workspace/demo-components.d.ts +9 -0
  81. package/dist/types/ultramodern-workspace/descriptors.d.ts +39 -0
  82. package/dist/types/ultramodern-workspace/effect-api.d.ts +73 -0
  83. package/dist/types/ultramodern-workspace/fs-io.d.ts +18 -0
  84. package/dist/types/ultramodern-workspace/index.d.ts +4 -0
  85. package/dist/types/ultramodern-workspace/locales.d.ts +183 -0
  86. package/dist/types/ultramodern-workspace/module-federation.d.ts +16 -0
  87. package/dist/types/ultramodern-workspace/naming.d.ts +16 -0
  88. package/dist/types/ultramodern-workspace/package-json.d.ts +12 -0
  89. package/dist/types/ultramodern-workspace/package-source.d.ts +2 -0
  90. package/dist/types/ultramodern-workspace/policy.d.ts +60 -0
  91. package/dist/types/ultramodern-workspace/public-surface.d.ts +37 -0
  92. package/dist/types/ultramodern-workspace/routes.d.ts +25 -0
  93. package/dist/types/ultramodern-workspace/types.d.ts +95 -0
  94. package/dist/types/ultramodern-workspace/versions.d.ts +38 -0
  95. package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +10 -0
  96. package/dist/types/ultramodern-workspace/write-workspace.d.ts +4 -0
  97. package/package.json +4 -3
  98. package/template-workspace/.github/workflows/ultramodern-workspace-gates.yml.handlebars +1 -4
  99. package/template-workspace/.mise.toml.handlebars +1 -0
  100. package/template-workspace/{AGENTS.md → AGENTS.md.handlebars} +12 -7
  101. package/template-workspace/README.md.handlebars +40 -24
  102. package/template-workspace/{pnpm-workspace.yaml → pnpm-workspace.yaml.handlebars} +2 -2
  103. package/template-workspace/scripts/bootstrap-agent-skills.mjs +31 -51
  104. package/templates/app/shell-frame.tsx +49 -0
  105. package/templates/app/ultramodern-route-head.tsx.handlebars +142 -0
  106. package/templates/packages/shared-contracts-index.ts +466 -0
  107. package/templates/workspace-scripts/assert-mf-types.mjs.handlebars +69 -0
  108. package/templates/workspace-scripts/check-ultramodern-i18n-boundaries.mjs +9 -0
  109. package/templates/workspace-scripts/generate-public-surface-assets.mjs +529 -0
  110. package/templates/workspace-scripts/proof-cloudflare-version.mjs +125 -0
  111. package/templates/workspace-scripts/ultramodern-cloudflare-proof.mjs +851 -0
  112. package/templates/workspace-scripts/ultramodern-performance-readiness.config.mjs +7 -0
  113. package/templates/workspace-scripts/ultramodern-performance-readiness.mjs +223 -0
  114. package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +593 -0
  115. package/dist/cjs/ultramodern-workspace.cjs +0 -6797
  116. package/dist/esm/ultramodern-workspace.js +0 -6738
  117. package/dist/esm-node/ultramodern-workspace.js +0 -6739
  118. package/dist/types/ultramodern-workspace.d.ts +0 -29
@@ -0,0 +1,742 @@
1
+ import "node:module";
2
+ import { ULTRAMODERN_WORKSPACE_MODERN_PACKAGES, WORKSPACE_PACKAGE_VERSION, createModernPackagesMetadata, modernPackageVersion } from "../ultramodern-package-source.js";
3
+ import { appHasEffectApi, appI18nNamespace, createCloudflarePublicUrlEnv, createCloudflareWorkerName, createModuleFederationRemoteContracts, createShellHost, effectApiPrefix, sharedPackages, shellApp, verticalEffectApps } from "./descriptors.js";
4
+ import { createEffectDomainOperations, createEffectOperationContract, createEffectReadinessContract, createEffectRequestContextContract, effectApiTopologyMetadata } from "./effect-api.js";
5
+ import { fileTemplatesDir, hashTemplateTree, workspaceTemplateDir } from "./fs-io.js";
6
+ import { createBuildMarker } from "./module-federation.js";
7
+ import { createRspackChunkLoadingGlobal, createRspackUniqueName, packageName, tailwindPrefixForApp } from "./naming.js";
8
+ import { createCloudflareDeployContract, createCloudflareSecurityContract } from "./policy.js";
9
+ import { createPublicWebAppArtifacts } from "./public-surface.js";
10
+ import { createLocalisedUrlsMap, createPublicRouteMetadata, createRouteOwnedI18nPaths } from "./routes.js";
11
+ import { CLOUDFLARE_COMPATIBILITY_DATE, I18NEXT_VERSION, MODULE_FEDERATION_AGENT_SKILLS_COMMIT, MODULE_FEDERATION_VERSION, NODE_VERSION, PNPM_VERSION, RSTACK_AGENT_SKILLS_COMMIT, TANSTACK_ROUTER_VERSION, TYPESCRIPT_NATIVE_PREVIEW_VERSION, TYPESCRIPT_VERSION, WRANGLER_VERSION, ZEPHYR_AGENT_VERSION, ZEPHYR_RSPACK_PLUGIN_VERSION } from "./versions.js";
12
+ const baselineAgentSkills = [
13
+ 'rsbuild-best-practices',
14
+ 'rspack-best-practices',
15
+ 'rspack-tracing',
16
+ 'rsdoctor-analysis',
17
+ 'rslib-best-practices',
18
+ 'rslib-modern-package',
19
+ 'rstest-best-practices'
20
+ ];
21
+ const moduleFederationAgentSkills = [
22
+ 'mf'
23
+ ];
24
+ const privateAgentSkills = [
25
+ 'plan-graph',
26
+ 'dag',
27
+ 'subagent-graph',
28
+ 'helm',
29
+ 'debugger-mode'
30
+ ];
31
+ function createTopology(scope, remotes = []) {
32
+ const shellHost = createShellHost(remotes);
33
+ return {
34
+ schemaVersion: 1,
35
+ id: 'ultramodern-superapp-workspace-reference-topology',
36
+ description: 'Generated UltraModern SuperApp shell that can grow by adding full-stack verticals.',
37
+ preset: 'presetUltramodern',
38
+ shell: {
39
+ id: shellApp.id,
40
+ kind: 'shell',
41
+ package: packageName(scope, shellApp.packageSuffix),
42
+ verticalRefs: shellHost.verticalRefs,
43
+ moduleFederation: {
44
+ role: 'host',
45
+ name: shellApp.mfName,
46
+ remotes: createModuleFederationRemoteContracts(shellHost, remotes),
47
+ ssr: true,
48
+ sharedContractVersion: 'mf-ssr-contract-v1'
49
+ },
50
+ cloudflare: createCloudflareDeployContract(scope, shellApp),
51
+ ownership: shellApp.ownership
52
+ },
53
+ verticals: remotes.map((vertical)=>({
54
+ id: vertical.id,
55
+ kind: vertical.kind,
56
+ domain: vertical.domain,
57
+ package: packageName(scope, vertical.packageSuffix),
58
+ path: vertical.directory,
59
+ moduleFederation: {
60
+ role: 'remote',
61
+ name: vertical.mfName,
62
+ manifestUrl: `http://localhost:${vertical.port}/mf-manifest.json`,
63
+ exposes: Object.keys(vertical.exposes ?? {}),
64
+ ...vertical.verticalRefs?.length ? {
65
+ verticalRefs: vertical.verticalRefs,
66
+ remotes: createModuleFederationRemoteContracts(vertical)
67
+ } : {},
68
+ ssr: true,
69
+ fallbackTelemetryEvent: 'modernjs:mv-runtime-parity',
70
+ sharedContractVersion: 'mf-ssr-contract-v1'
71
+ },
72
+ ...effectApiTopologyMetadata(vertical) ? {
73
+ api: effectApiTopologyMetadata(vertical)
74
+ } : {},
75
+ cloudflare: createCloudflareDeployContract(scope, vertical),
76
+ ownership: vertical.ownership
77
+ })),
78
+ sharedPackages: sharedPackages.map((sharedPackage)=>({
79
+ id: sharedPackage.id,
80
+ package: packageName(scope, sharedPackage.id),
81
+ path: sharedPackage.directory,
82
+ description: sharedPackage.description
83
+ })),
84
+ validation: {
85
+ script: "scripts/validate-ultramodern-workspace.mjs",
86
+ commands: [
87
+ 'pnpm i18n:boundaries',
88
+ 'pnpm contract:check'
89
+ ]
90
+ }
91
+ };
92
+ }
93
+ function createOwnership(scope, remotes = []) {
94
+ return {
95
+ schemaVersion: 1,
96
+ preset: 'presetUltramodern',
97
+ owners: [
98
+ shellApp,
99
+ ...remotes,
100
+ ...sharedPackages.map((sharedPackage)=>({
101
+ id: sharedPackage.id,
102
+ packageSuffix: sharedPackage.id,
103
+ directory: sharedPackage.directory,
104
+ ownership: {
105
+ team: 'super-app-platform',
106
+ slack: '#super-app-platform',
107
+ pagerDuty: 'pd-super-app-platform',
108
+ runbookRef: `runbooks/wave2/${sharedPackage.id}.md`,
109
+ adrRef: 'docs/super-app-rfc-adr/wave2/reference-topology.md#shared-packages',
110
+ blastRadius: {
111
+ tier: 'tier-1-shared-contract',
112
+ references: [
113
+ 'docs/super-app-rfc-adr/wave2/blast-radius.md#shared-packages'
114
+ ]
115
+ }
116
+ }
117
+ }))
118
+ ].map((owner)=>({
119
+ id: owner.id,
120
+ package: packageName(scope, owner.packageSuffix),
121
+ path: owner.directory,
122
+ ownership: owner.ownership
123
+ }))
124
+ };
125
+ }
126
+ function createDevelopmentOverlay(remotes = []) {
127
+ return {
128
+ schemaVersion: 1,
129
+ environment: 'development',
130
+ preset: 'presetUltramodern',
131
+ ports: Object.fromEntries([
132
+ shellApp,
133
+ ...remotes
134
+ ].map((app)=>[
135
+ app.id,
136
+ app.port
137
+ ])),
138
+ manifests: Object.fromEntries(remotes.map((remote)=>[
139
+ remote.id,
140
+ `http://localhost:${remote.port}/mf-manifest.json`
141
+ ])),
142
+ apis: Object.fromEntries(verticalEffectApps(remotes).map((app)=>[
143
+ app.id,
144
+ `http://localhost:${app.port}${effectApiPrefix(app)}`
145
+ ]))
146
+ };
147
+ }
148
+ function createPackageSourceMetadata(scope, packageSource) {
149
+ return {
150
+ schemaVersion: 1,
151
+ strategy: packageSource.strategy,
152
+ modernPackages: createModernPackagesMetadata(ULTRAMODERN_WORKSPACE_MODERN_PACKAGES, packageSource),
153
+ generatedWorkspacePackages: {
154
+ packages: sharedPackages.map((sharedPackage)=>packageName(scope, sharedPackage.id)),
155
+ specifier: WORKSPACE_PACKAGE_VERSION
156
+ },
157
+ validation: {
158
+ validator: "scripts/validate-ultramodern-workspace.mjs",
159
+ strategyAwareChecks: [
160
+ 'generated-validator'
161
+ ]
162
+ }
163
+ };
164
+ }
165
+ function createAppConfigContract(app) {
166
+ return {
167
+ preset: 'presetUltramodern',
168
+ plugins: [
169
+ 'appTools',
170
+ 'tanstackRouterPlugin',
171
+ 'i18nPlugin',
172
+ ...appHasEffectApi(app) ? [
173
+ 'bffPlugin'
174
+ ] : [],
175
+ 'moduleFederationPlugin',
176
+ 'zephyrRspackPlugin'
177
+ ],
178
+ dev: {
179
+ assetPrefix: '/'
180
+ },
181
+ output: {
182
+ assetPrefix: {
183
+ envFallbackOrder: [
184
+ 'MODERN_ASSET_PREFIX',
185
+ 'ULTRAMODERN_ASSET_PREFIX'
186
+ ],
187
+ default: '/'
188
+ },
189
+ disableTsChecker: true,
190
+ distPath: {
191
+ html: './'
192
+ },
193
+ polyfill: 'off',
194
+ splitRouteChunks: true
195
+ },
196
+ performance: {
197
+ readinessDiagnostics: {
198
+ default: 'enabled',
199
+ optOut: {
200
+ env: 'ULTRAMODERN_PERFORMANCE_READINESS_DIAGNOSTICS=false',
201
+ config: "scripts/ultramodern-performance-readiness.config.mjs"
202
+ },
203
+ report: '.codex/reports/performance-readiness/ultramodern-performance-readiness.json',
204
+ failOn: 'framework-invariant'
205
+ },
206
+ rsdoctor: {
207
+ enabledByEnv: 'ULTRAMODERN_RSDOCTOR=true',
208
+ disableClientServer: true
209
+ }
210
+ },
211
+ rspack: {
212
+ output: {
213
+ uniqueName: createRspackUniqueName(app),
214
+ chunkLoadingGlobal: createRspackChunkLoadingGlobal(app)
215
+ }
216
+ },
217
+ html: {
218
+ outputStructure: 'flat'
219
+ },
220
+ source: {
221
+ mainEntryName: 'index',
222
+ siteUrl: {
223
+ envFallbackOrder: [
224
+ 'MODERN_PUBLIC_SITE_URL',
225
+ createCloudflarePublicUrlEnv(app),
226
+ 'ULTRAMODERN_CLOUDFLARE_WORKERS_DEV_SUBDOMAIN',
227
+ app.portEnv
228
+ ],
229
+ defaultLocalhostPort: app.port
230
+ },
231
+ siteUrlGlobal: 'ULTRAMODERN_SITE_URL'
232
+ },
233
+ ...appHasEffectApi(app) ? {
234
+ bff: {
235
+ runtimeFramework: 'effect',
236
+ prefix: app.effectApi.prefix,
237
+ openapi: '/openapi.json'
238
+ }
239
+ } : {}
240
+ };
241
+ }
242
+ function createPerformanceReadinessContract() {
243
+ return {
244
+ schemaVersion: 1,
245
+ default: 'enabled',
246
+ mode: 'diagnostic',
247
+ scope: 'ultramodern-generated-and-framework-owned',
248
+ report: {
249
+ script: "scripts/ultramodern-performance-readiness.mjs",
250
+ config: "scripts/ultramodern-performance-readiness.config.mjs",
251
+ defaultPath: '.codex/reports/performance-readiness/ultramodern-performance-readiness.json',
252
+ deterministic: true
253
+ },
254
+ optOut: {
255
+ env: 'ULTRAMODERN_PERFORMANCE_READINESS_DIAGNOSTICS=false',
256
+ config: {
257
+ path: "scripts/ultramodern-performance-readiness.config.mjs",
258
+ field: 'enabled',
259
+ value: false
260
+ }
261
+ },
262
+ failurePolicy: {
263
+ defaultFailOn: 'framework-invariant',
264
+ allowedValues: [
265
+ 'framework-invariant',
266
+ 'never'
267
+ ],
268
+ rejects: [
269
+ 'accessibility-certification',
270
+ 'product-ui-scoring',
271
+ 'marketing-copy-scoring',
272
+ 'broad-compliance-engine',
273
+ 'rsdoctor-artifact-revival'
274
+ ]
275
+ },
276
+ signals: [
277
+ {
278
+ id: 'bfcache',
279
+ title: 'BFCache diagnostics',
280
+ ownedCheck: 'generated-runtime-static-analysis',
281
+ invariant: 'Generated UltraModern files must not install beforeunload or unload handlers.'
282
+ },
283
+ {
284
+ id: 'core-web-vitals-rum',
285
+ title: 'Core Web Vitals/RUM readiness',
286
+ ownedCheck: 'preset-telemetry-contract',
287
+ invariant: 'UltraModern preset telemetry must remain enabled by default without requiring local collectors.'
288
+ },
289
+ {
290
+ id: 'duplicate-prefetch-warmup',
291
+ title: 'Duplicate prefetch/warmup waste',
292
+ ownedCheck: 'topology-and-route-contract',
293
+ invariant: 'Generated route URLs, remote refs, and manifest URLs must stay deterministic and duplicate-free.'
294
+ },
295
+ {
296
+ id: 'cache-policy-sanity',
297
+ title: 'Cache policy sanity',
298
+ ownedCheck: 'generated-cloudflare-contract',
299
+ invariant: 'Generated Cloudflare contracts must retain CSS cache-control and public-surface cache expectations.'
300
+ },
301
+ {
302
+ id: 'save-data-behavior',
303
+ title: 'Save-Data behavior',
304
+ ownedCheck: 'framework-router-contract',
305
+ invariant: 'Automatic framework warmup must remain skippable by browser Save-Data policy.'
306
+ },
307
+ {
308
+ id: 'cloudflare-ssr-cache-hints',
309
+ title: 'Cloudflare SSR response and caching hints',
310
+ ownedCheck: 'generated-cloudflare-proof-contract',
311
+ invariant: 'Generated Cloudflare SSR proof routes and response/cache hint contracts must be present.'
312
+ }
313
+ ]
314
+ };
315
+ }
316
+ function cssLayerName(app) {
317
+ if ('shell' === app.kind) return 'ultramodern-shell-base';
318
+ return `ultramodern-vertical-${app.domain ?? app.id}`;
319
+ }
320
+ function cssRole(app) {
321
+ if ('shell' === app.kind) return 'shell-base-overlay';
322
+ return 'vertical-css';
323
+ }
324
+ function cssClassPrefix(app) {
325
+ return `${tailwindPrefixForApp(app)}:`;
326
+ }
327
+ function createCssDedupeContract(scope) {
328
+ return {
329
+ strategy: 'shared-token-package-plus-css-content-hash',
330
+ sharedPackage: packageName(scope, 'shared-design-tokens'),
331
+ sharedLayers: [
332
+ 'ultramodern-shared-tokens'
333
+ ],
334
+ runtimeLoad: 'once-per-content-hash',
335
+ duplicateBaseStylesAllowed: false
336
+ };
337
+ }
338
+ function createCssSsrContract(app) {
339
+ return {
340
+ cloudflare: true,
341
+ firstPaintRequired: true,
342
+ linkEmission: 'modern-ssr-css-assets',
343
+ verticalCss: 'shell' === app.kind ? 'host-preloads-shell-and-shared-css' : 'federated-manifest-owned-css'
344
+ };
345
+ }
346
+ function createAppCssFederationContract(scope, app) {
347
+ const ownedLayers = 'shell' === app.kind ? [
348
+ 'ultramodern-shell-base',
349
+ 'ultramodern-shell-overlay'
350
+ ] : [
351
+ cssLayerName(app)
352
+ ];
353
+ return {
354
+ owner: {
355
+ id: app.id,
356
+ package: packageName(scope, app.packageSuffix),
357
+ team: app.ownership.team
358
+ },
359
+ role: cssRole(app),
360
+ rootSelector: `[data-app-id="${app.id}"]`,
361
+ classPrefix: cssClassPrefix(app),
362
+ layers: {
363
+ shared: [
364
+ 'ultramodern-shared-tokens'
365
+ ],
366
+ owned: ownedLayers,
367
+ imports: 'shell' === app.kind ? [
368
+ 'ultramodern-shared-tokens'
369
+ ] : [
370
+ 'ultramodern-shared-tokens'
371
+ ]
372
+ },
373
+ entrypoints: {
374
+ layoutImport: 'src/routes/layout.tsx',
375
+ css: [
376
+ 'src/routes/index.css'
377
+ ],
378
+ ...'shell' !== app.kind ? {
379
+ federationEntry: 'src/federation-entry.tsx'
380
+ } : {}
381
+ },
382
+ assets: {
383
+ shared: [
384
+ `${packageName(scope, 'shared-design-tokens')}/tokens.css`
385
+ ],
386
+ owned: [
387
+ 'src/routes/index.css'
388
+ ],
389
+ emittedBy: 'modern-rspack-css-extraction',
390
+ contentHash: true
391
+ },
392
+ dedupe: createCssDedupeContract(scope),
393
+ ssr: createCssSsrContract(app)
394
+ };
395
+ }
396
+ function createCssFederationContract(scope) {
397
+ return {
398
+ schemaVersion: 1,
399
+ sharedDesignTokens: {
400
+ owner: {
401
+ id: 'shared-design-tokens',
402
+ package: packageName(scope, 'shared-design-tokens'),
403
+ team: 'super-app-platform'
404
+ },
405
+ role: 'shared-design-tokens',
406
+ rootSelector: ':root',
407
+ classPrefix: '--um-',
408
+ layers: {
409
+ owned: [
410
+ 'ultramodern-shared-tokens'
411
+ ]
412
+ },
413
+ entrypoints: {
414
+ css: [
415
+ 'packages/shared-design-tokens/src/tokens.css'
416
+ ],
417
+ typescript: [
418
+ 'packages/shared-design-tokens/src/index.ts'
419
+ ]
420
+ },
421
+ assets: {
422
+ exports: [
423
+ './tokens.css'
424
+ ],
425
+ css: [
426
+ 'packages/shared-design-tokens/src/tokens.css'
427
+ ]
428
+ },
429
+ dedupe: createCssDedupeContract(scope),
430
+ ssr: {
431
+ cloudflare: true,
432
+ firstPaintRequired: true,
433
+ importedByApps: true
434
+ }
435
+ },
436
+ ownershipRules: {
437
+ shell: [
438
+ 'base',
439
+ 'overlay'
440
+ ],
441
+ verticals: [
442
+ 'vertical-css'
443
+ ],
444
+ forbiddenVerticalLayers: [
445
+ 'ultramodern-shell-base',
446
+ 'ultramodern-shell-overlay'
447
+ ]
448
+ }
449
+ };
450
+ }
451
+ function createStylingContract(scope, app, enableTailwind) {
452
+ return {
453
+ tailwind: enableTailwind,
454
+ ...enableTailwind ? {
455
+ postcssPlugins: [
456
+ '@tailwindcss/postcss'
457
+ ],
458
+ prefix: tailwindPrefixForApp(app),
459
+ source: '..',
460
+ sourceMode: 'source(none)'
461
+ } : {},
462
+ federation: createAppCssFederationContract(scope, app)
463
+ };
464
+ }
465
+ function createAppGeneratedContract(scope, app, apps, enableTailwind) {
466
+ const appWithResolvedRefs = 'shell' === app.kind ? {
467
+ ...app,
468
+ verticalRefs: apps.filter((candidate)=>'shell' !== candidate.kind).map((candidate)=>candidate.id)
469
+ } : app;
470
+ const publicWeb = createPublicWebAppArtifacts(app);
471
+ const consumedRemotes = createModuleFederationRemoteContracts(appWithResolvedRefs, apps);
472
+ return {
473
+ id: app.id,
474
+ package: packageName(scope, app.packageSuffix),
475
+ path: app.directory,
476
+ kind: app.kind,
477
+ config: createAppConfigContract(app),
478
+ styling: createStylingContract(scope, app, enableTailwind),
479
+ deploy: {
480
+ target: 'cloudflare',
481
+ cloudflare: createCloudflareDeployContract(scope, app),
482
+ worker: {
483
+ compatibilityDate: CLOUDFLARE_COMPATIBILITY_DATE,
484
+ name: createCloudflareWorkerName(scope, app),
485
+ security: createCloudflareSecurityContract(),
486
+ ssr: true
487
+ },
488
+ output: {
489
+ flat: true,
490
+ htmlDistPath: './'
491
+ }
492
+ },
493
+ ssr: {
494
+ mode: 'string',
495
+ moduleFederationAppSSR: true
496
+ },
497
+ i18n: {
498
+ plugin: '@modern-js/plugin-i18n',
499
+ backend: {
500
+ enabled: true,
501
+ loadPath: '/locales/{{lng}}/{{ns}}.json'
502
+ },
503
+ reactI18next: false,
504
+ languages: [
505
+ 'en',
506
+ 'cs'
507
+ ],
508
+ fallbackLanguage: 'en',
509
+ namespace: appI18nNamespace(app),
510
+ namespaces: [
511
+ appI18nNamespace(app),
512
+ 'translation'
513
+ ],
514
+ publicDir: [
515
+ './locales',
516
+ './assets'
517
+ ],
518
+ localisedUrls: createLocalisedUrlsMap(app),
519
+ resourceOwnership: {
520
+ ownerAppId: app.id,
521
+ source: 'route-owned',
522
+ staticJson: `./locales/{lng}/${appI18nNamespace(app)}.json`
523
+ }
524
+ },
525
+ routes: {
526
+ source: 'route-owned',
527
+ metadataAuthoring: 'colocated-route-meta',
528
+ generatedManifest: true,
529
+ metadataExport: './src/routes/ultramodern-route-metadata',
530
+ localisedUrls: createLocalisedUrlsMap(app),
531
+ owned: createRouteOwnedI18nPaths(app),
532
+ publicRoutes: createPublicRouteMetadata(app),
533
+ privateByDefault: true,
534
+ publicnessDefault: 'private-app-screen',
535
+ generatedRouteMap: true,
536
+ manualOverrides: [],
537
+ publicHead: publicWeb.publicHead,
538
+ publicSurface: publicWeb.publicSurface
539
+ },
540
+ moduleFederation: {
541
+ name: app.mfName,
542
+ ...appWithResolvedRefs.verticalRefs?.length ? {
543
+ verticalRefs: appWithResolvedRefs.verticalRefs,
544
+ remotes: consumedRemotes
545
+ } : {},
546
+ exposes: Object.keys(app.exposes ?? {}),
547
+ dts: {
548
+ displayErrorInTerminal: true,
549
+ compilerInstance: 'tsgo'
550
+ },
551
+ browserSafeExposesOnly: true,
552
+ zephyrRspackPlugin: ZEPHYR_RSPACK_PLUGIN_VERSION
553
+ },
554
+ marker: {
555
+ appId: app.id,
556
+ packageName: packageName(scope, app.packageSuffix),
557
+ version: '0.1.0',
558
+ build: createBuildMarker(scope, app),
559
+ deployProfile: 'cloudflare-ssr-mf-effect-v1',
560
+ uiSurface: 'ui',
561
+ ...appHasEffectApi(app) ? {
562
+ apiSurface: 'effect-bff'
563
+ } : {}
564
+ },
565
+ ...appHasEffectApi(app) ? {
566
+ effect: {
567
+ runtime: 'effect',
568
+ import: '@modern-js/plugin-bff/effect-edge',
569
+ prefix: app.effectApi.prefix,
570
+ openapi: '/openapi.json',
571
+ workerEntry: 'worker/__modern_bff_effect.js',
572
+ contract: './shared/effect/api',
573
+ client: './effect/client',
574
+ readiness: createEffectReadinessContract(app),
575
+ requestContext: createEffectRequestContextContract(),
576
+ domainOperations: createEffectDomainOperations(app),
577
+ ...createEffectOperationContract(app)
578
+ }
579
+ } : {}
580
+ };
581
+ }
582
+ function createGeneratedContract(scope, apps = [
583
+ createShellHost()
584
+ ], enableTailwind = true) {
585
+ return {
586
+ schemaVersion: 1,
587
+ profile: 'cloudflare-ssr-mf-effect-v1',
588
+ packageManager: {
589
+ source: 'package.json',
590
+ manager: 'pnpm',
591
+ version: PNPM_VERSION,
592
+ toolchain: 'mise'
593
+ },
594
+ node: {
595
+ source: 'package.json engines.node and .mise.toml',
596
+ version: NODE_VERSION,
597
+ engineRange: '>=26',
598
+ toolchain: 'mise'
599
+ },
600
+ versions: {
601
+ typescript: TYPESCRIPT_VERSION,
602
+ typescriptNativePreview: TYPESCRIPT_NATIVE_PREVIEW_VERSION,
603
+ moduleFederation: MODULE_FEDERATION_VERSION,
604
+ tanstackRouter: TANSTACK_ROUTER_VERSION,
605
+ i18next: I18NEXT_VERSION,
606
+ zephyrRspackPlugin: ZEPHYR_RSPACK_PLUGIN_VERSION,
607
+ zephyrAgent: ZEPHYR_AGENT_VERSION,
608
+ wrangler: WRANGLER_VERSION
609
+ },
610
+ performanceReadiness: createPerformanceReadinessContract(),
611
+ cssFederation: createCssFederationContract(scope),
612
+ apps: apps.map((app)=>createAppGeneratedContract(scope, app, apps, enableTailwind))
613
+ };
614
+ }
615
+ function createTemplateManifest(modernVersion, packageSource) {
616
+ return {
617
+ schemaVersion: 1,
618
+ template: {
619
+ id: 'modernjs-ultramodern-superapp-workspace',
620
+ version: modernVersion,
621
+ displayName: 'Modern.js UltraModern SuperApp Workspace',
622
+ description: 'Growable SuperApp shell, shared packages, and topology skeleton.',
623
+ compatibilityLane: 'ultramodern-mv',
624
+ minimumModernVersion: modernVersion
625
+ },
626
+ source: {
627
+ type: 'builtin',
628
+ name: 'modernjs-ultramodern-superapp-workspace',
629
+ repositoryPath: 'packages/toolkit/create/template-workspace',
630
+ generator: 'packages/toolkit/create/src/ultramodern-workspace/'
631
+ },
632
+ integrity: {
633
+ checksums: [
634
+ {
635
+ algorithm: 'sha256',
636
+ value: hashTemplateTree(workspaceTemplateDir),
637
+ scope: 'source-tree'
638
+ },
639
+ {
640
+ algorithm: 'sha256',
641
+ value: hashTemplateTree(fileTemplatesDir),
642
+ scope: 'file-templates-tree'
643
+ }
644
+ ],
645
+ provenance: {
646
+ kind: 'repo-local',
647
+ issuer: '@modern-js/create',
648
+ subject: 'packages/toolkit/create/template-workspace'
649
+ }
650
+ },
651
+ materialization: {
652
+ targetRoot: 'generated-project-root',
653
+ allowedPaths: [
654
+ '.agents/**',
655
+ '.codex/**',
656
+ '.github/**',
657
+ '.gitignore',
658
+ '.mise.toml',
659
+ '.modernjs/**',
660
+ 'AGENTS.md',
661
+ 'README.md',
662
+ 'apps/**',
663
+ 'packages/**',
664
+ 'lefthook.yml',
665
+ 'package.json',
666
+ 'oxfmt.config.ts',
667
+ 'oxlint.config.ts',
668
+ 'pnpm-workspace.yaml',
669
+ "scripts/**",
670
+ 'topology/**',
671
+ 'tsconfig.base.json'
672
+ ],
673
+ deniedPaths: [
674
+ '.git/**',
675
+ '.npmrc',
676
+ '.yarnrc',
677
+ '.env',
678
+ '.env.*',
679
+ 'node_modules/**',
680
+ 'dist/**'
681
+ ],
682
+ overwritePolicy: 'deny-existing'
683
+ },
684
+ packageSource: {
685
+ strategy: packageSource.strategy,
686
+ config: '.modernjs/ultramodern-package-source.json',
687
+ modernPackageSpecifier: modernPackageVersion(packageSource),
688
+ generatedWorkspacePackageSpecifier: WORKSPACE_PACKAGE_VERSION
689
+ },
690
+ agentSkills: {
691
+ installDir: '.agents/skills',
692
+ source: {
693
+ repository: 'https://github.com/rstackjs/agent-skills',
694
+ commit: RSTACK_AGENT_SKILLS_COMMIT,
695
+ license: 'MIT',
696
+ licensePath: '.agents/rstackjs-agent-skills-LICENSE'
697
+ },
698
+ baseline: baselineAgentSkills,
699
+ moduleFederationSource: {
700
+ repository: 'https://github.com/module-federation/agent-skills',
701
+ commit: MODULE_FEDERATION_AGENT_SKILLS_COMMIT,
702
+ install: 'clone',
703
+ baseline: moduleFederationAgentSkills
704
+ },
705
+ privateSource: {
706
+ repository: 'https://github.com/TechsioCZ/skills',
707
+ install: 'clone-if-authorized',
708
+ baseline: privateAgentSkills
709
+ },
710
+ lockFile: '.agents/skills-lock.json'
711
+ },
712
+ validation: {
713
+ schemaValidation: true,
714
+ sourceValidation: [
715
+ 'source-type-supported',
716
+ 'checksum-verified',
717
+ 'provenance-present'
718
+ ],
719
+ materializationValidation: [
720
+ 'path-boundary-policy',
721
+ 'path-boundary-denylist',
722
+ 'no-path-traversal',
723
+ 'no-absolute-paths',
724
+ 'overwrite-policy-enforced'
725
+ ],
726
+ postMaterializationValidation: [
727
+ 'ultramodern-workspace-contract-check',
728
+ 'github-workflow-security-enforced',
729
+ 'pnpm-11-policy-enforced',
730
+ 'template-manifest-retained'
731
+ ],
732
+ expectedCommands: [
733
+ 'mise install',
734
+ 'pnpm install',
735
+ 'pnpm run i18n:boundaries',
736
+ 'pnpm run contract:check',
737
+ 'pnpm run performance:readiness'
738
+ ]
739
+ }
740
+ };
741
+ }
742
+ export { baselineAgentSkills, createAppConfigContract, createAppCssFederationContract, createAppGeneratedContract, createCssDedupeContract, createCssFederationContract, createCssSsrContract, createDevelopmentOverlay, createGeneratedContract, createOwnership, createPackageSourceMetadata, createPerformanceReadinessContract, createStylingContract, createTemplateManifest, createTopology, cssClassPrefix, cssLayerName, cssRole, moduleFederationAgentSkills, privateAgentSkills };