@bleedingdev/modern-js-ultramodern-create 3.9.0-ultramodern.12 → 3.9.0-ultramodern.13

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 (201) hide show
  1. package/README.md +32 -36
  2. package/dist/cjs/ultramodern-release-cohort.cjs +6 -21
  3. package/dist/cjs/ultramodern-tooling/commands/context.cjs +2 -1
  4. package/dist/cjs/ultramodern-tooling/commands/validate.cjs +2 -57
  5. package/dist/cjs/ultramodern-tooling/commands.cjs +11 -1
  6. package/dist/cjs/ultramodern-tooling/config/index.cjs +11 -4
  7. package/dist/cjs/ultramodern-tooling/config/load.cjs +4 -17
  8. package/dist/cjs/ultramodern-tooling/config/metadata.cjs +41 -2
  9. package/dist/cjs/ultramodern-tooling/config/normalize.cjs +121 -208
  10. package/dist/cjs/ultramodern-workspace/add-shell.cjs +51 -18
  11. package/dist/cjs/ultramodern-workspace/add-vertical/execute.cjs +40 -39
  12. package/dist/cjs/ultramodern-workspace/add-vertical/plan.cjs +1 -1
  13. package/dist/cjs/ultramodern-workspace/add-vertical/preflight.cjs +2 -8
  14. package/dist/cjs/ultramodern-workspace/add-vertical/topology.cjs +0 -32
  15. package/dist/cjs/ultramodern-workspace/add-vertical/workspace-state.cjs +3 -10
  16. package/dist/cjs/ultramodern-workspace/api/contracts.cjs +2 -2
  17. package/dist/cjs/ultramodern-workspace/api/rpc.cjs +16 -14
  18. package/dist/cjs/ultramodern-workspace/api/service.cjs +4 -8
  19. package/dist/cjs/ultramodern-workspace/api/shared.cjs +1 -1
  20. package/dist/cjs/ultramodern-workspace/backend-federation.cjs +3 -3
  21. package/dist/cjs/ultramodern-workspace/contracts.cjs +14 -183
  22. package/dist/cjs/ultramodern-workspace/delivery-unit-stamp.cjs +10 -5
  23. package/dist/cjs/ultramodern-workspace/delivery-unit-sync.cjs +27 -17
  24. package/dist/cjs/ultramodern-workspace/delivery-unit.cjs +11 -6
  25. package/dist/cjs/ultramodern-workspace/descriptors.cjs +0 -4
  26. package/dist/cjs/ultramodern-workspace/generation-result.cjs +1 -1
  27. package/dist/cjs/ultramodern-workspace/index.cjs +2 -5
  28. package/dist/cjs/ultramodern-workspace/mf-validation/constants.cjs +0 -6
  29. package/dist/cjs/ultramodern-workspace/mf-validation/discovery.cjs +6 -6
  30. package/dist/cjs/ultramodern-workspace/mf-validation/path-utils.cjs +37 -38
  31. package/dist/cjs/ultramodern-workspace/module-federation/config.cjs +8 -15
  32. package/dist/cjs/ultramodern-workspace/package-json.cjs +47 -54
  33. package/dist/cjs/ultramodern-workspace/patch-inventory.cjs +27 -36
  34. package/dist/cjs/ultramodern-workspace/policy.cjs +6 -354
  35. package/dist/cjs/ultramodern-workspace/public-surface.cjs +2 -2
  36. package/dist/cjs/ultramodern-workspace/routes.cjs +11 -7
  37. package/dist/cjs/ultramodern-workspace/shells.cjs +0 -70
  38. package/dist/cjs/ultramodern-workspace/tooling-command-catalog.cjs +6 -43
  39. package/dist/cjs/ultramodern-workspace/tsconfigs.cjs +3 -1
  40. package/dist/cjs/ultramodern-workspace/validation/architecture.cjs +5 -5
  41. package/dist/cjs/ultramodern-workspace/validation/workspace.cjs +275 -1249
  42. package/dist/cjs/ultramodern-workspace/versions.cjs +25 -41
  43. package/dist/cjs/ultramodern-workspace/workspace-artifact-ownership.cjs +1 -6
  44. package/dist/cjs/ultramodern-workspace/workspace-script-plan.cjs +7 -7
  45. package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +17 -112
  46. package/dist/cjs/ultramodern-workspace/workspace-validation-contract.cjs +62 -371
  47. package/dist/cjs/ultramodern-workspace/write-app.cjs +5 -4
  48. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +10 -50
  49. package/dist/esm/ultramodern-release-cohort.js +5 -14
  50. package/dist/esm/ultramodern-tooling/commands/context.js +2 -1
  51. package/dist/esm/ultramodern-tooling/commands/validate.js +3 -48
  52. package/dist/esm/ultramodern-tooling/commands.js +10 -1
  53. package/dist/esm/ultramodern-tooling/config/index.js +1 -0
  54. package/dist/esm/ultramodern-tooling/config/load.js +5 -17
  55. package/dist/esm/ultramodern-tooling/config/metadata.js +36 -1
  56. package/dist/esm/ultramodern-tooling/config/normalize.js +125 -201
  57. package/dist/esm/ultramodern-workspace/add-shell.js +55 -22
  58. package/dist/esm/ultramodern-workspace/add-vertical/execute.js +41 -41
  59. package/dist/esm/ultramodern-workspace/add-vertical/plan.js +2 -2
  60. package/dist/esm/ultramodern-workspace/add-vertical/preflight.js +3 -6
  61. package/dist/esm/ultramodern-workspace/add-vertical/topology.js +1 -30
  62. package/dist/esm/ultramodern-workspace/add-vertical/workspace-state.js +3 -10
  63. package/dist/esm/ultramodern-workspace/api/contracts.js +2 -2
  64. package/dist/esm/ultramodern-workspace/api/rpc.js +16 -14
  65. package/dist/esm/ultramodern-workspace/api/service.js +4 -8
  66. package/dist/esm/ultramodern-workspace/api/shared.js +1 -1
  67. package/dist/esm/ultramodern-workspace/backend-federation.js +3 -3
  68. package/dist/esm/ultramodern-workspace/contracts.js +14 -180
  69. package/dist/esm/ultramodern-workspace/delivery-unit-stamp.js +10 -5
  70. package/dist/esm/ultramodern-workspace/delivery-unit-sync.js +28 -18
  71. package/dist/esm/ultramodern-workspace/delivery-unit.js +11 -6
  72. package/dist/esm/ultramodern-workspace/descriptors.js +1 -2
  73. package/dist/esm/ultramodern-workspace/generation-result.js +2 -2
  74. package/dist/esm/ultramodern-workspace/index.js +1 -1
  75. package/dist/esm/ultramodern-workspace/mf-validation/constants.js +1 -4
  76. package/dist/esm/ultramodern-workspace/mf-validation/discovery.js +7 -7
  77. package/dist/esm/ultramodern-workspace/mf-validation/path-utils.js +36 -34
  78. package/dist/esm/ultramodern-workspace/module-federation/config.js +9 -16
  79. package/dist/esm/ultramodern-workspace/package-json.js +48 -55
  80. package/dist/esm/ultramodern-workspace/patch-inventory.js +27 -36
  81. package/dist/esm/ultramodern-workspace/policy.js +6 -335
  82. package/dist/esm/ultramodern-workspace/public-surface.js +2 -2
  83. package/dist/esm/ultramodern-workspace/routes.js +11 -7
  84. package/dist/esm/ultramodern-workspace/shells.js +3 -67
  85. package/dist/esm/ultramodern-workspace/tooling-command-catalog.js +7 -41
  86. package/dist/esm/ultramodern-workspace/tsconfigs.js +4 -2
  87. package/dist/esm/ultramodern-workspace/validation/architecture.js +5 -5
  88. package/dist/esm/ultramodern-workspace/validation/workspace.js +267 -1250
  89. package/dist/esm/ultramodern-workspace/versions.js +24 -28
  90. package/dist/esm/ultramodern-workspace/workspace-artifact-ownership.js +3 -8
  91. package/dist/esm/ultramodern-workspace/workspace-script-plan.js +7 -7
  92. package/dist/esm/ultramodern-workspace/workspace-scripts.js +18 -107
  93. package/dist/esm/ultramodern-workspace/workspace-validation-contract.js +64 -373
  94. package/dist/esm/ultramodern-workspace/write-app.js +4 -3
  95. package/dist/esm/ultramodern-workspace/write-workspace.js +16 -53
  96. package/dist/esm-node/ultramodern-release-cohort.js +5 -14
  97. package/dist/esm-node/ultramodern-tooling/commands/context.js +2 -1
  98. package/dist/esm-node/ultramodern-tooling/commands/validate.js +3 -48
  99. package/dist/esm-node/ultramodern-tooling/commands.js +10 -1
  100. package/dist/esm-node/ultramodern-tooling/config/index.js +1 -0
  101. package/dist/esm-node/ultramodern-tooling/config/load.js +5 -17
  102. package/dist/esm-node/ultramodern-tooling/config/metadata.js +36 -1
  103. package/dist/esm-node/ultramodern-tooling/config/normalize.js +125 -201
  104. package/dist/esm-node/ultramodern-workspace/add-shell.js +55 -22
  105. package/dist/esm-node/ultramodern-workspace/add-vertical/execute.js +41 -41
  106. package/dist/esm-node/ultramodern-workspace/add-vertical/plan.js +2 -2
  107. package/dist/esm-node/ultramodern-workspace/add-vertical/preflight.js +3 -6
  108. package/dist/esm-node/ultramodern-workspace/add-vertical/topology.js +1 -30
  109. package/dist/esm-node/ultramodern-workspace/add-vertical/workspace-state.js +3 -10
  110. package/dist/esm-node/ultramodern-workspace/api/contracts.js +2 -2
  111. package/dist/esm-node/ultramodern-workspace/api/rpc.js +16 -14
  112. package/dist/esm-node/ultramodern-workspace/api/service.js +4 -8
  113. package/dist/esm-node/ultramodern-workspace/api/shared.js +1 -1
  114. package/dist/esm-node/ultramodern-workspace/backend-federation.js +3 -3
  115. package/dist/esm-node/ultramodern-workspace/contracts.js +14 -180
  116. package/dist/esm-node/ultramodern-workspace/delivery-unit-stamp.js +10 -5
  117. package/dist/esm-node/ultramodern-workspace/delivery-unit-sync.js +28 -18
  118. package/dist/esm-node/ultramodern-workspace/delivery-unit.js +11 -6
  119. package/dist/esm-node/ultramodern-workspace/descriptors.js +1 -2
  120. package/dist/esm-node/ultramodern-workspace/generation-result.js +2 -2
  121. package/dist/esm-node/ultramodern-workspace/index.js +1 -1
  122. package/dist/esm-node/ultramodern-workspace/mf-validation/constants.js +1 -4
  123. package/dist/esm-node/ultramodern-workspace/mf-validation/discovery.js +7 -7
  124. package/dist/esm-node/ultramodern-workspace/mf-validation/path-utils.js +36 -34
  125. package/dist/esm-node/ultramodern-workspace/module-federation/config.js +9 -16
  126. package/dist/esm-node/ultramodern-workspace/package-json.js +48 -55
  127. package/dist/esm-node/ultramodern-workspace/patch-inventory.js +27 -36
  128. package/dist/esm-node/ultramodern-workspace/policy.js +6 -335
  129. package/dist/esm-node/ultramodern-workspace/public-surface.js +2 -2
  130. package/dist/esm-node/ultramodern-workspace/routes.js +11 -7
  131. package/dist/esm-node/ultramodern-workspace/shells.js +3 -67
  132. package/dist/esm-node/ultramodern-workspace/tooling-command-catalog.js +7 -41
  133. package/dist/esm-node/ultramodern-workspace/tsconfigs.js +4 -2
  134. package/dist/esm-node/ultramodern-workspace/validation/architecture.js +5 -5
  135. package/dist/esm-node/ultramodern-workspace/validation/workspace.js +267 -1250
  136. package/dist/esm-node/ultramodern-workspace/versions.js +24 -28
  137. package/dist/esm-node/ultramodern-workspace/workspace-artifact-ownership.js +3 -8
  138. package/dist/esm-node/ultramodern-workspace/workspace-script-plan.js +7 -7
  139. package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +18 -107
  140. package/dist/esm-node/ultramodern-workspace/workspace-validation-contract.js +64 -373
  141. package/dist/esm-node/ultramodern-workspace/write-app.js +4 -3
  142. package/dist/esm-node/ultramodern-workspace/write-workspace.js +16 -53
  143. package/dist/types/ultramodern-release-cohort.d.ts +1 -3
  144. package/dist/types/ultramodern-tooling/commands/validate.d.ts +2 -2
  145. package/dist/types/ultramodern-tooling/config/index.d.ts +1 -0
  146. package/dist/types/ultramodern-tooling/config/load.d.ts +6 -58
  147. package/dist/types/ultramodern-tooling/config/metadata.d.ts +3 -0
  148. package/dist/types/ultramodern-tooling/config/normalize.d.ts +9 -90
  149. package/dist/types/ultramodern-tooling/config/types.d.ts +1 -9
  150. package/dist/types/ultramodern-workspace/add-vertical/preflight.d.ts +3 -3
  151. package/dist/types/ultramodern-workspace/add-vertical/topology.d.ts +0 -1
  152. package/dist/types/ultramodern-workspace/add-vertical/workspace-state.d.ts +1 -1
  153. package/dist/types/ultramodern-workspace/api/rpc.d.ts +1 -1
  154. package/dist/types/ultramodern-workspace/contracts.d.ts +1 -3
  155. package/dist/types/ultramodern-workspace/delivery-unit-stamp.d.ts +2 -2
  156. package/dist/types/ultramodern-workspace/delivery-unit.d.ts +2 -2
  157. package/dist/types/ultramodern-workspace/descriptors.d.ts +0 -1
  158. package/dist/types/ultramodern-workspace/index.d.ts +1 -1
  159. package/dist/types/ultramodern-workspace/mf-validation/constants.d.ts +0 -1
  160. package/dist/types/ultramodern-workspace/mf-validation/path-utils.d.ts +2 -3
  161. package/dist/types/ultramodern-workspace/module-federation/config.d.ts +1 -1
  162. package/dist/types/ultramodern-workspace/patch-inventory.d.ts +2 -10
  163. package/dist/types/ultramodern-workspace/policy.d.ts +60 -182
  164. package/dist/types/ultramodern-workspace/shells.d.ts +1 -14
  165. package/dist/types/ultramodern-workspace/tooling-command-catalog.d.ts +1 -6
  166. package/dist/types/ultramodern-workspace/validation/types.d.ts +1 -12
  167. package/dist/types/ultramodern-workspace/validation/workspace.d.ts +5 -2
  168. package/dist/types/ultramodern-workspace/versions.d.ts +23 -27
  169. package/dist/types/ultramodern-workspace/workspace-script-plan.d.ts +1 -1
  170. package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +7 -14
  171. package/dist/types/ultramodern-workspace/workspace-validation-contract.d.ts +22 -188
  172. package/dist/types/ultramodern-workspace/write-workspace.d.ts +1 -3
  173. package/package.json +17 -16
  174. package/{template-workspace/.modernjs/release-cohort.json → release-cohort.json} +48 -48
  175. package/template-workspace/README.md.handlebars +9 -16
  176. package/template-workspace/pnpm-workspace.yaml.handlebars +0 -24
  177. package/templates/workspace/apps/modern.config.ts.handlebars +5 -5
  178. package/templates/workspace/apps/shared/src/routes/ultramodern-route-metadata.ts.handlebars +8 -21
  179. package/templates/workspace-scripts/generate-node-backend-federation.mjs +39 -49
  180. package/templates/workspace-scripts/generate-public-surface-assets.mjs +142 -206
  181. package/templates/workspace-scripts/materialize-zerops-runtime.mjs +3 -11
  182. package/templates/workspace-scripts/proof-cloudflare-version.mjs +53 -444
  183. package/templates/workspace-scripts/proof-node-backend-federation.mjs +193 -39
  184. package/templates/workspace-scripts/proof-workerd-ssr.mjs +126 -66
  185. package/templates/workspace-scripts/ultramodern-performance-readiness.mjs +45 -147
  186. package/dist/cjs/ultramodern-workspace/cohort-parity.cjs +0 -129
  187. package/dist/cjs/ultramodern-workspace/patch-parity.cjs +0 -163
  188. package/dist/esm/ultramodern-workspace/cohort-parity.js +0 -74
  189. package/dist/esm/ultramodern-workspace/patch-parity.js +0 -99
  190. package/dist/esm-node/ultramodern-workspace/cohort-parity.js +0 -75
  191. package/dist/esm-node/ultramodern-workspace/patch-parity.js +0 -100
  192. package/dist/types/ultramodern-workspace/cohort-parity.d.ts +0 -31
  193. package/dist/types/ultramodern-workspace/patch-parity.d.ts +0 -39
  194. package/template-workspace/patches/@module-federation__bridge-react@2.9.0.patch +0 -47
  195. package/template-workspace/patches/@module-federation__dts-plugin@2.9.0.patch +0 -132
  196. package/template-workspace/patches/@module-federation__modern-js-v3@2.9.0.patch +0 -287
  197. package/template-workspace/patches/@module-federation__runtime-core@2.9.0.patch +0 -13
  198. package/template-workspace/patches/drizzle-orm-ts7-strict-declarations.patch +0 -471
  199. package/template-workspace/patches/msgpackr@2.1.0.patch +0 -30
  200. package/template-workspace/patches/zod@4.5.4.patch +0 -56
  201. package/templates/packages/effect-bff-runtime.ts +0 -2
@@ -40,6 +40,8 @@ __webpack_require__.d(__webpack_exports__, {
40
40
  addUltramodernVertical: ()=>addUltramodernVertical,
41
41
  executeAddUltramodernVertical: ()=>executeAddUltramodernVertical
42
42
  });
43
+ const external_node_fs_namespaceObject = require("node:fs");
44
+ var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
43
45
  const external_node_path_namespaceObject = require("node:path");
44
46
  var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
45
47
  const config_cjs_namespaceObject = require("../../ultramodern-tooling/config.cjs");
@@ -78,7 +80,8 @@ function executeAddUltramodernVertical(options, logicalWorkspaceRoot = options.w
78
80
  verticalRefs: app.verticalRefs?.filter((id)=>existingIds.has(id))
79
81
  } : app);
80
82
  const previousApps = (0, config_cjs_namespaceObject.normalizeWorkspaceInputs)(options.workspaceRoot, {
81
- config
83
+ topology,
84
+ overlay
82
85
  }).apps;
83
86
  const previousDevPorts = (0, external_workspace_artifact_ownership_cjs_namespaceObject.workspaceDevelopmentPorts)(previousApps);
84
87
  const { io: ownedIo } = (0, external_workspace_artifact_ownership_cjs_namespaceObject.preserveConsumerWorkspaceArtifacts)(options.workspaceRoot, (0, external_workspace_artifact_ownership_cjs_namespaceObject.workspaceArtifactCandidates)(scope, previousProjection(previousApps), previousTailwind, previousProjection([
@@ -101,6 +104,13 @@ function executeAddUltramodernVertical(options, logicalWorkspaceRoot = options.w
101
104
  ...nextAdditionalShells
102
105
  ], overlay.ports);
103
106
  (0, external_write_workspace_cjs_namespaceObject.writeApp)(options.workspaceRoot, scope, vertical, packageSource, enableTailwind, updatedVerticals, bridge, configuredDevPorts);
107
+ const newPackagePath = external_node_path_default().join(options.workspaceRoot, vertical.directory, 'package.json');
108
+ const newPackage = JSON.parse(external_node_fs_default().readFileSync(newPackagePath, 'utf-8'));
109
+ newPackage.dependencies = {
110
+ ...newPackage.dependencies,
111
+ ...config.inheritedWorkspaceDependencies
112
+ };
113
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(newPackagePath, newPackage);
104
114
  if (targetShell.id === primaryShell.id) {
105
115
  topology.shell ??= {};
106
116
  topology.shell.deliveryUnit = {
@@ -110,7 +120,10 @@ function executeAddUltramodernVertical(options, logicalWorkspaceRoot = options.w
110
120
  };
111
121
  topology.shell.verticalRefs = nextTargetShell.verticalRefs;
112
122
  topology.shell.moduleFederation ??= {};
113
- topology.shell.moduleFederation.remotes = (0, external_descriptors_cjs_namespaceObject.createModuleFederationRemoteContracts)(nextPrimaryShell, updatedVerticals).map((remote)=>({
123
+ topology.shell.moduleFederation.remotes = preserveAuthoredRemoteUrls(topology.shell.moduleFederation.remotes, (0, external_descriptors_cjs_namespaceObject.createModuleFederationRemoteContracts)({
124
+ ...primaryShell,
125
+ verticalRefs: primaryShell.verticalRefs?.filter((id)=>existingIds.has(id))
126
+ }, existingVerticals), (0, external_descriptors_cjs_namespaceObject.createModuleFederationRemoteContracts)(nextPrimaryShell, updatedVerticals)).map((remote)=>({
114
127
  id: remote.id,
115
128
  name: remote.name,
116
129
  manifestUrl: remote.manifestUrl
@@ -148,41 +161,19 @@ function executeAddUltramodernVertical(options, logicalWorkspaceRoot = options.w
148
161
  (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(topologyPath, topology);
149
162
  (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(ownershipPath, ownership);
150
163
  (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(overlayPath, overlay);
151
- const generatedConfig = (0, external_write_workspace_cjs_namespaceObject.createCompactUltramodernConfig)(scope, options.modernVersion, packageSource, [
152
- nextPrimaryShell,
153
- ...updatedVerticals
154
- ], enableTailwind, bridge, nextAdditionalShells, nextPrimaryShell);
155
- const newEntry = generatedConfig.topology.apps.find((app)=>app.id === vertical.id);
156
- for (const key of [
157
- 'moduleFederation',
158
- 'backendFederation'
159
- ])config[key] = {
160
- ...config[key],
161
- apps: [
162
- ...(0, config_cjs_namespaceObject.preserveUnknownProjectionFields)(config[key]?.apps, generatedConfig[key].apps)
163
- ]
164
- };
165
- config.features = {
166
- ...config.features,
167
- tailwind: enableTailwind
168
- };
169
- config.topology = {
170
- ...config.topology,
171
- apps: [
172
- ...config.topology.apps.map((app)=>{
173
- const generated = generatedConfig.topology.apps.find((entry)=>entry.id === app.id);
174
- return app.id === primaryShell.id ? updateShellComposition(app, generated) : {
175
- ...app,
176
- ...generated?.backendFederation ? {
177
- backendFederation: (0, config_cjs_namespaceObject.preserveUnknownProjectionFields)(app.backendFederation, generated.backendFederation)
178
- } : {}
179
- };
180
- }),
181
- newEntry
182
- ]
183
- };
184
- if (Array.isArray(config.shells)) config.shells = config.shells.map((entry)=>entry?.id === nextTargetShell.id ? updateShellComposition(entry, generatedConfig.shells.find((shell)=>shell.id === entry.id)) : entry);
185
- (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(external_node_path_default().join(options.workspaceRoot, external_descriptors_cjs_namespaceObject.ULTRAMODERN_CONFIG_PATH), config);
164
+ if (targetShell.id !== primaryShell.id) {
165
+ topology.shells = (topology.shells ?? []).map((entry)=>entry.id === nextTargetShell.id ? updateShellComposition(entry, {
166
+ verticalRefs: nextTargetShell.verticalRefs,
167
+ moduleFederation: {
168
+ verticalRefs: nextTargetShell.verticalRefs,
169
+ remotes: preserveAuthoredRemoteUrls(entry.moduleFederation?.remotes, (0, external_descriptors_cjs_namespaceObject.createModuleFederationRemoteContracts)({
170
+ ...targetShell,
171
+ verticalRefs: targetShell.verticalRefs?.filter((id)=>existingIds.has(id))
172
+ }, existingVerticals), (0, external_descriptors_cjs_namespaceObject.createModuleFederationRemoteContracts)(nextTargetShell, updatedVerticals))
173
+ }
174
+ }) : entry);
175
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(topologyPath, topology);
176
+ }
186
177
  ownedIo.write(external_node_path_default().join(options.workspaceRoot, 'zerops.yaml'), `${(0, external_zerops_cjs_namespaceObject.createZeropsYaml)(scope, [
187
178
  nextPrimaryShell,
188
179
  ...updatedVerticals,
@@ -192,12 +183,12 @@ function executeAddUltramodernVertical(options, logicalWorkspaceRoot = options.w
192
183
  nextPrimaryShell,
193
184
  ...nextAdditionalShells
194
185
  ])(0, external_shell_files_cjs_namespaceObject.rewriteShellAppFiles)(options.workspaceRoot, scope, packageSource, enableTailwind, updatedVerticals, bridge, shellToRefresh.id === nextTargetShell.id ? nextTargetShell : shellToRefresh, configuredDevPorts, {
195
- shell: previousApps.find((app)=>app.id === shellToRefresh.id),
186
+ shell: previousProjection(previousApps).find((app)=>app.id === shellToRefresh.id),
196
187
  remotes: existingVerticals,
197
188
  devPorts: previousDevPorts,
198
189
  enableTailwind: previousTailwind
199
190
  });
200
- (0, external_workspace_scripts_cjs_namespaceObject.writeGeneratedWorkspaceScripts)(options.workspaceRoot, updatedVerticals, {
191
+ (0, external_workspace_scripts_cjs_namespaceObject.writeGeneratedWorkspaceScripts)(options.workspaceRoot, {
201
192
  io: {
202
193
  writeGenerated: ownedIo.write
203
194
  }
@@ -270,6 +261,16 @@ function updateShellComposition(current, generated) {
270
261
  }
271
262
  };
272
263
  }
264
+ function preserveAuthoredRemoteUrls(current, previousGenerated, nextGenerated) {
265
+ return nextGenerated.map((remote)=>{
266
+ const previous = Array.isArray(current) ? current.find((entry)=>entry.id === remote.id) : void 0;
267
+ const generated = previousGenerated.find((entry)=>entry.id === remote.id);
268
+ return previous?.manifestUrl && previous.manifestUrl !== generated?.manifestUrl ? {
269
+ ...remote,
270
+ manifestUrl: previous.manifestUrl
271
+ } : remote;
272
+ });
273
+ }
273
274
  exports.addUltramodernVertical = __webpack_exports__.addUltramodernVertical;
274
275
  exports.executeAddUltramodernVertical = __webpack_exports__.executeAddUltramodernVertical;
275
276
  for(var __rspack_i in __webpack_exports__)if (-1 === [
@@ -71,7 +71,7 @@ function createVerticalPlan(preflight, result, jsonMutations) {
71
71
  shellDependencyChanges: createShellDependencyChanges(scope, vertical, targetShell),
72
72
  generatedContractChanges: [
73
73
  {
74
- path: external_descriptors_cjs_namespaceObject.ULTRAMODERN_CONFIG_PATH,
74
+ path: 'topology/reference-topology.json',
75
75
  addedAppIds: [
76
76
  vertical.id
77
77
  ],
@@ -39,7 +39,6 @@ __webpack_require__.r(__webpack_exports__);
39
39
  __webpack_require__.d(__webpack_exports__, {
40
40
  UnknownUltramodernShellError: ()=>UnknownUltramodernShellError,
41
41
  assertNonEmptyString: ()=>assertNonEmptyString,
42
- createPrimaryShellDescriptor: ()=>external_topology_cjs_namespaceObject.createPrimaryShellDescriptor,
43
42
  prepareAddUltramodernVertical: ()=>prepareAddUltramodernVertical,
44
43
  readRequiredJsonObject: ()=>readRequiredJsonObject
45
44
  });
@@ -54,7 +53,6 @@ const external_naming_cjs_namespaceObject = require("../naming.cjs");
54
53
  const external_types_cjs_namespaceObject = require("../types.cjs");
55
54
  const external_constants_cjs_namespaceObject = require("./constants.cjs");
56
55
  const external_workspace_state_cjs_namespaceObject = require("./workspace-state.cjs");
57
- const external_topology_cjs_namespaceObject = require("./topology.cjs");
58
56
  class UnknownUltramodernShellError extends Error {
59
57
  constructor(sourcePath, requestedShellId, available){
60
58
  const issue = {
@@ -77,7 +75,6 @@ function prepareAddUltramodernVertical(options) {
77
75
  const topology = readRequiredJsonObject(topologyPath);
78
76
  const ownership = readRequiredJsonObject(ownershipPath);
79
77
  const overlay = readRequiredJsonObject(overlayPath);
80
- const config = readRequiredJsonObject(external_node_path_default().join(options.workspaceRoot, external_descriptors_cjs_namespaceObject.ULTRAMODERN_CONFIG_PATH));
81
78
  assertOptionalJsonObject(topology.shell, 'topology.shell', topologyPath);
82
79
  assertOptionalJsonArray(topology.verticals, 'topology.verticals', topologyPath);
83
80
  assertOptionalJsonArray(ownership.owners, 'ownership.owners', ownershipPath);
@@ -85,7 +82,6 @@ function prepareAddUltramodernVertical(options) {
85
82
  assertOptionalJsonObject(overlay.manifests, 'overlay.manifests', overlayPath);
86
83
  assertOptionalJsonObject(overlay.apis, 'overlay.apis', overlayPath);
87
84
  const workspace = (0, config_cjs_namespaceObject.normalizeWorkspaceInputs)(options.workspaceRoot, {
88
- config,
89
85
  topology,
90
86
  overlay
91
87
  });
@@ -95,7 +91,7 @@ function prepareAddUltramodernVertical(options) {
95
91
  const existingVerticals = workspace.verticals;
96
92
  const additionalShells = workspace.additionalShells;
97
93
  const resolvedPrimaryShell = workspace.primaryShell;
98
- const targetShell = resolveTargetShell(options.shell, resolvedPrimaryShell, additionalShells, external_node_path_default().join(options.workspaceRoot, external_descriptors_cjs_namespaceObject.ULTRAMODERN_CONFIG_PATH));
94
+ const targetShell = resolveTargetShell(options.shell, resolvedPrimaryShell, additionalShells, topologyPath);
99
95
  const portsWithPrimary = {
100
96
  ...overlay.ports,
101
97
  [resolvedPrimaryShell.id]: resolvedPrimaryShell.port
@@ -131,7 +127,7 @@ function prepareAddUltramodernVertical(options) {
131
127
  ownershipPath,
132
128
  overlayPath,
133
129
  rootPackage,
134
- config,
130
+ config: workspace.config,
135
131
  topology,
136
132
  ownership,
137
133
  overlay,
@@ -215,13 +211,11 @@ function assertSafeOutputPath(relativePath, appId) {
215
211
  }
216
212
  exports.UnknownUltramodernShellError = __webpack_exports__.UnknownUltramodernShellError;
217
213
  exports.assertNonEmptyString = __webpack_exports__.assertNonEmptyString;
218
- exports.createPrimaryShellDescriptor = __webpack_exports__.createPrimaryShellDescriptor;
219
214
  exports.prepareAddUltramodernVertical = __webpack_exports__.prepareAddUltramodernVertical;
220
215
  exports.readRequiredJsonObject = __webpack_exports__.readRequiredJsonObject;
221
216
  for(var __rspack_i in __webpack_exports__)if (-1 === [
222
217
  "UnknownUltramodernShellError",
223
218
  "assertNonEmptyString",
224
- "createPrimaryShellDescriptor",
225
219
  "prepareAddUltramodernVertical",
226
220
  "readRequiredJsonObject"
227
221
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
@@ -28,7 +28,6 @@ var __webpack_require__ = {};
28
28
  var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
- createPrimaryShellDescriptor: ()=>createPrimaryShellDescriptor,
32
31
  ownershipEntry: ()=>ownershipEntry,
33
32
  verticalTopologyEntry: ()=>verticalTopologyEntry,
34
33
  verticalsFromTopology: ()=>verticalsFromTopology
@@ -143,41 +142,10 @@ function verticalsFromTopology(topology, ports) {
143
142
  };
144
143
  });
145
144
  }
146
- function createPrimaryShellDescriptor(topology, config) {
147
- const compactShell = config.topology?.apps?.find((app)=>app?.id === external_descriptors_cjs_namespaceObject.shellApp.id);
148
- const verticalRefs = Array.isArray(topology.shell?.verticalRefs) ? topology.shell.verticalRefs.filter((id)=>'string' == typeof id) : Array.isArray(compactShell?.moduleFederation?.verticalRefs) ? compactShell.moduleFederation.verticalRefs.filter((id)=>'string' == typeof id) : [];
149
- return {
150
- ...external_descriptors_cjs_namespaceObject.shellApp,
151
- ...compactShell?.deliveryUnit || topology.shell?.deliveryUnit ? {
152
- deliveryUnit: compactShell?.deliveryUnit ?? topology.shell.deliveryUnit
153
- } : {},
154
- verticalRefs,
155
- ...'string' == typeof compactShell?.packageSuffix ? {
156
- packageSuffix: compactShell.packageSuffix
157
- } : {},
158
- ...'string' == typeof compactShell?.displayName ? {
159
- displayName: compactShell.displayName
160
- } : {},
161
- ...'string' == typeof compactShell?.path ? {
162
- directory: compactShell.path
163
- } : {},
164
- ...'number' == typeof compactShell?.port ? {
165
- port: compactShell.port
166
- } : {},
167
- ...'string' == typeof compactShell?.portEnv ? {
168
- portEnv: compactShell.portEnv
169
- } : {},
170
- ...'string' == typeof compactShell?.moduleFederation?.name ? {
171
- mfName: compactShell.moduleFederation.name
172
- } : {}
173
- };
174
- }
175
- exports.createPrimaryShellDescriptor = __webpack_exports__.createPrimaryShellDescriptor;
176
145
  exports.ownershipEntry = __webpack_exports__.ownershipEntry;
177
146
  exports.verticalTopologyEntry = __webpack_exports__.verticalTopologyEntry;
178
147
  exports.verticalsFromTopology = __webpack_exports__.verticalsFromTopology;
179
148
  for(var __rspack_i in __webpack_exports__)if (-1 === [
180
- "createPrimaryShellDescriptor",
181
149
  "ownershipEntry",
182
150
  "verticalTopologyEntry",
183
151
  "verticalsFromTopology"
@@ -48,7 +48,6 @@ const external_node_fs_namespaceObject = require("node:fs");
48
48
  var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
49
49
  const external_node_path_namespaceObject = require("node:path");
50
50
  var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
51
- const external_descriptors_cjs_namespaceObject = require("../descriptors.cjs");
52
51
  const external_naming_cjs_namespaceObject = require("../naming.cjs");
53
52
  const external_package_source_cjs_namespaceObject = require("../package-source.cjs");
54
53
  const external_constants_cjs_namespaceObject = require("./constants.cjs");
@@ -59,11 +58,11 @@ function workspaceOperationSettings(options, config) {
59
58
  modernVersion: options.modernVersion,
60
59
  packageSource: options.packageSource
61
60
  }) : config.packageSource;
62
- if (!packageSource) throw new Error(`Missing UltraModern package source: ${external_node_path_default().join(options.workspaceRoot, external_descriptors_cjs_namespaceObject.ULTRAMODERN_CONFIG_PATH)}`);
61
+ if (!packageSource) throw new Error(`Missing UltraModern package source in workspace manifests: ${options.workspaceRoot}`);
63
62
  return {
64
63
  packageSource,
65
64
  enableTailwind: options.enableTailwind ?? config.features.tailwind,
66
- bridge: config.bridge
65
+ bridge: void 0
67
66
  };
68
67
  }
69
68
  function assertValidVerticalName(name) {
@@ -74,8 +73,7 @@ function assertValidVerticalName(name) {
74
73
  function configuredDevelopmentPorts(ports, additionalShells = []) {
75
74
  return [
76
75
  ...new Set([
77
- ...Object.values(ports),
78
- ...additionalShells.map((shell)=>shell.port)
76
+ ...Object.values(ports)
79
77
  ].filter((value)=>'number' == typeof value && Number.isFinite(value)))
80
78
  ];
81
79
  }
@@ -87,11 +85,6 @@ function assertGlobalPortUniqueness(ports, additionalShells = []) {
87
85
  if (previous) throw new Error(`Duplicate development port "${value}" for ${previous} and ${id}.`);
88
86
  owners.set(value, id);
89
87
  }
90
- for (const shell of additionalShells){
91
- const previous = owners.get(shell.port);
92
- if (previous) throw new Error(`Duplicate development port "${shell.port}" for ${previous} and ${shell.id}.`);
93
- owners.set(shell.port, shell.id);
94
- }
95
88
  }
96
89
  function nextAvailablePort(ports, additionalShells = [], minimumPort = external_constants_cjs_namespaceObject.FIRST_VERTICAL_PORT) {
97
90
  const used = new Set(configuredDevelopmentPorts(ports, additionalShells));
@@ -145,7 +145,7 @@ function apiTopologyMetadata(app) {
145
145
  },
146
146
  client: {
147
147
  export: './api/rpc-client',
148
- path: `${app.directory}/src/api/${app.api.stem}-rpc-client.ts`
148
+ path: `${app.directory}/${'api-only' === app.surfaceProfile ? 'shared' : 'src/api'}/${app.api.stem}-rpc-client.ts`
149
149
  },
150
150
  serverEntry: `${app.directory}/api/index.ts`,
151
151
  rpcPath: (0, external_rpc_cjs_namespaceObject.rpcPath)(app),
@@ -168,7 +168,7 @@ function apiTopologyMetadata(app) {
168
168
  },
169
169
  client: {
170
170
  export: './api/client',
171
- path: `${app.directory}/src/api/${app.api.stem}-client.ts`
171
+ path: `${app.directory}/${'api-only' === app.surfaceProfile ? 'shared' : 'src/api'}/${app.api.stem}-client.ts`
172
172
  },
173
173
  serverEntry: `${app.directory}/api/index.ts`,
174
174
  basePath: `${app.api.prefix}/${app.api.stem}`,
@@ -74,7 +74,9 @@ export const ${itemSchema}: Schema.Codec<${pascalStem}RpcItem> = Schema.Struct({
74
74
  title: Schema.String,
75
75
  });
76
76
 
77
- export class ${notFound} extends Schema.TaggedError<${notFound}>()(
77
+ const taggedErrorSchema = Schema.TaggedError;
78
+
79
+ export class ${notFound} extends taggedErrorSchema<${notFound}>()(
78
80
  '${notFound}',
79
81
  {
80
82
  id: Schema.String,
@@ -85,13 +87,13 @@ export class ${notFound} extends Schema.TaggedError<${notFound}>()(
85
87
  // (mirrors the shapes Effect BFF's RpcServer/RpcClient runtime accepts).
86
88
  export const ${groupExport} = RpcGroup.make(
87
89
  Rpc.make('list', {
88
- success: Schema.Struct({ items: Schema.Array(${itemSchema}) }),
89
90
  payload: { limit: Schema.optional(Schema.Number) },
91
+ success: Schema.Struct({ items: Schema.Array(${itemSchema}) }),
90
92
  }),
91
93
  Rpc.make('get', {
92
- success: ${itemSchema},
93
94
  error: ${notFound},
94
95
  payload: { id: Schema.String },
96
+ success: ${itemSchema},
95
97
  }),
96
98
  );
97
99
 
@@ -117,6 +119,12 @@ function rpcServiceEntryWiring(service) {
117
119
  const layer = `
118
120
  const ${groupName}RpcLayer = ${groupExport}.toLayer(
119
121
  ${groupExport}.of({
122
+ get: ({ id }) => {
123
+ const matched = ${groupName}Items.find(candidate => candidate.id === id);
124
+ return matched === undefined
125
+ ? Effect.fail(new ${notFound}({ id }))
126
+ : Effect.succeed({ id: matched.id, title: matched.title });
127
+ },
120
128
  list: ({ limit }) =>
121
129
  Effect.succeed({
122
130
  items:
@@ -130,12 +138,6 @@ const ${groupName}RpcLayer = ${groupExport}.toLayer(
130
138
  title: item.title,
131
139
  })),
132
140
  }),
133
- get: ({ id }) => {
134
- const matched = ${groupName}Items.find(candidate => candidate.id === id);
135
- return matched === undefined
136
- ? Effect.fail(new ${notFound}({ id }))
137
- : Effect.succeed({ id: matched.id, title: matched.title });
138
- },
139
141
  }),
140
142
  );
141
143
  `;
@@ -186,11 +188,11 @@ const apiRuntime = defineEffectBff({
186
188
  ${rpc.field}
187
189
  });
188
190
 
189
- export { ${groupExport} };
191
+ export { ${groupExport} } from '../shared/rpc.ts';
190
192
  export default apiRuntime;
191
193
  `;
192
194
  }
193
- function createRpcClientFile(service) {
195
+ function createRpcClientFile(service, contractImportPath = '../../shared/rpc.ts') {
194
196
  const groupExport = verticalRpcGroupExport(service);
195
197
  const contractExport = verticalRpcContractExport(service);
196
198
  const stem = (0, external_descriptors_cjs_namespaceObject.resolveApiStem)(service);
@@ -202,11 +204,11 @@ function createRpcClientFile(service) {
202
204
  import {
203
205
  ${contractExport},
204
206
  ${groupExport},
205
- } from '../../shared/rpc.ts';
207
+ } from '${contractImportPath}';
206
208
 
207
209
  export { Effect } from '@modern-js/bff-effect/effect-client';
208
210
 
209
- export const ${pascalStem}RpcContract = ${contractExport};
211
+ export { ${contractExport} as ${pascalStem}RpcContract } from '${contractImportPath}';
210
212
 
211
213
  export interface ${pascalStem}RpcClientOptions {
212
214
  url?: string | URL;
@@ -216,8 +218,8 @@ export const make${pascalStem}RpcClient = (
216
218
  options: ${pascalStem}RpcClientOptions = {},
217
219
  ) =>
218
220
  makeEffectRpcClient(${groupExport}, {
219
- url: String(options.url ?? ${contractExport}.path),
220
221
  serialization: 'json',
222
+ url: String(options.url ?? ${contractExport}.path),
221
223
  });
222
224
 
223
225
  export const list${pascalStem}Rpc = (
@@ -43,7 +43,7 @@ function createApiServiceEntry(service, contractImportPath, options) {
43
43
  const groupName = (0, external_names_cjs_namespaceObject.verticalApiGroupName)(service);
44
44
  const notFoundErrorExport = (0, external_names_cjs_namespaceObject.verticalApiNotFoundErrorExport)(service);
45
45
  const stem = (0, external_descriptors_cjs_namespaceObject.resolveApiStem)(service);
46
- const assemblyImport = options ? `import { assembleEffectBffRuntime } from '${(0, external_naming_cjs_namespaceObject.packageName)(options.scope, 'shared-contracts')}/server/effect-bff-runtime';\n` : '';
46
+ const assemblyImport = options ? "import { assembleEffectBffRuntime } from '@modern-js/bff-effect/assembly';\n" : '';
47
47
  return `${assemblyImport}import {
48
48
  ${options ? '' : 'defineEffectBff,'}
49
49
  Effect,
@@ -202,12 +202,8 @@ export default apiRuntime;
202
202
  function createBackendEffectApiExpose(scope, service) {
203
203
  if ((service.api?.protocol ?? 'rest') === 'rpc') {
204
204
  const groupExport = (0, external_rpc_cjs_namespaceObject.verticalRpcGroupExport)(service);
205
- const contractExport = (0, external_rpc_cjs_namespaceObject.verticalRpcContractExport)(service);
206
205
  return `import { ultramodernApiMarker } from '../shared/ultramodern-build.ts';
207
- import {
208
- ${contractExport},
209
- ${groupExport},
210
- } from '../shared/rpc.ts';
206
+ import { ${groupExport} } from '../shared/rpc.ts';
211
207
 
212
208
  export const backendFederationContract = {
213
209
  compatibility: {
@@ -221,16 +217,16 @@ export const backendFederationContract = {
221
217
  executionSurfaces: ['node-mf-runtime'],
222
218
  exposes: ['./effect-api'],
223
219
  name: '${(0, external_descriptors_cjs_namespaceObject.createBackendFederationName)(service)}',
220
+ role: 'microvertical-server',
224
221
  rpcPath: '${(0, external_rpc_cjs_namespaceObject.rpcPath)(service)}',
225
222
  rpcSerialization: 'json',
226
- role: 'microvertical-server',
227
223
  runtimeFramework: 'effect',
228
224
  strictEffectApproach: true,
229
225
  } as const;
230
226
 
231
227
  export { default, default as runtime } from './index.ts';
232
228
  export {
233
- ${contractExport} as contract,
229
+ ${(0, external_rpc_cjs_namespaceObject.verticalRpcContractExport)(service)} as contract,
234
230
  ${groupExport} as rpc,
235
231
  } from '../shared/rpc.ts';
236
232
  export const api: unknown = ${groupExport};
@@ -197,7 +197,7 @@ ${shared ? 'export type OperationContext = MicroVerticalOperationContext;' : `ex
197
197
  | 'client'
198
198
  | 'server'
199
199
  | 'generated-client'
200
- | 'effect-adapter'
200
+ | 'effect-server'
201
201
  | 'data-platform'
202
202
  | 'unknown';
203
203
  traceId?: string;
@@ -66,14 +66,14 @@ function createEffectExpose(app) {
66
66
  if ('rpc' === (0, external_descriptors_cjs_namespaceObject.resolveApiProtocol)(app)) return {
67
67
  contract: `${app.directory}/shared/rpc.ts`,
68
68
  runtime: `${app.directory}/api/index.ts`,
69
- client: `${app.directory}/src/api/${app.api.stem}-rpc-client.ts`,
69
+ client: `${app.directory}/${'api-only' === app.surfaceProfile ? 'shared' : 'src/api'}/${app.api.stem}-rpc-client.ts`,
70
70
  rpc: (0, rpc_cjs_namespaceObject.rpcPath)(app),
71
71
  serialization: 'json'
72
72
  };
73
73
  return {
74
74
  contract: `${app.directory}/shared/api.ts`,
75
75
  runtime: `${app.directory}/api/index.ts`,
76
- client: `${app.directory}/src/api/${app.api.stem}-client.ts`,
76
+ client: `${app.directory}/${'api-only' === app.surfaceProfile ? 'shared' : 'src/api'}/${app.api.stem}-client.ts`,
77
77
  openapi: `${app.api.prefix}/openapi.json`,
78
78
  readiness: `${app.api.prefix}/${apiStem}/readiness`
79
79
  };
@@ -262,9 +262,9 @@ export const backendFederationContract = {
262
262
  exposes: ['${backend_federation_contracts_namespaceObject.BACKEND_FEDERATION_EFFECT_EXPOSE}'],
263
263
  name: '${(0, external_descriptors_cjs_namespaceObject.createBackendFederationName)(app)}',
264
264
  nodeAdapterVersion: '${backend_federation_contracts_namespaceObject.BACKEND_FEDERATION_NODE_ADAPTER_VERSION}',
265
+ role: 'microvertical-server',
265
266
  rpcPath: '${(0, rpc_cjs_namespaceObject.rpcPath)(app)}',
266
267
  rpcSerialization: 'json',
267
- role: 'microvertical-server',
268
268
  runtimeFramework: 'effect',
269
269
  strictEffectApproach: true,
270
270
  } as const;