@bleedingdev/modern-js-create 3.2.0-ultramodern.99 → 3.4.0-ultramodern.0

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 (179) hide show
  1. package/README.md +281 -106
  2. package/bin/run.js +1 -0
  3. package/dist/cjs/create-package-root.cjs +63 -0
  4. package/dist/cjs/index.cjs +658 -0
  5. package/dist/cjs/locale/en.cjs +101 -0
  6. package/dist/cjs/locale/index.cjs +50 -0
  7. package/dist/cjs/locale/zh.cjs +101 -0
  8. package/dist/cjs/ultramodern-package-source.cjs +135 -0
  9. package/dist/cjs/ultramodern-workspace/add-vertical.cjs +603 -0
  10. package/dist/cjs/ultramodern-workspace/app-files.cjs +223 -0
  11. package/dist/cjs/ultramodern-workspace/codesmith.cjs +134 -0
  12. package/dist/cjs/ultramodern-workspace/contracts.cjs +837 -0
  13. package/dist/cjs/ultramodern-workspace/demo-components.cjs +422 -0
  14. package/dist/cjs/ultramodern-workspace/descriptors.cjs +222 -0
  15. package/dist/cjs/ultramodern-workspace/effect-api.cjs +952 -0
  16. package/dist/cjs/ultramodern-workspace/fs-io.cjs +191 -0
  17. package/dist/cjs/ultramodern-workspace/generation-result.cjs +158 -0
  18. package/dist/cjs/ultramodern-workspace/index.cjs +51 -0
  19. package/dist/cjs/ultramodern-workspace/locales.cjs +173 -0
  20. package/dist/cjs/ultramodern-workspace/module-federation.cjs +487 -0
  21. package/dist/cjs/ultramodern-workspace/naming.cjs +161 -0
  22. package/dist/cjs/ultramodern-workspace/overlays.cjs +120 -0
  23. package/dist/cjs/ultramodern-workspace/package-json.cjs +406 -0
  24. package/dist/cjs/ultramodern-workspace/package-source.cjs +59 -0
  25. package/dist/cjs/ultramodern-workspace/policy.cjs +248 -0
  26. package/dist/cjs/ultramodern-workspace/public-api.cjs +47 -0
  27. package/dist/cjs/ultramodern-workspace/public-surface.cjs +268 -0
  28. package/dist/cjs/ultramodern-workspace/routes.cjs +375 -0
  29. package/dist/cjs/ultramodern-workspace/types.cjs +61 -0
  30. package/dist/cjs/ultramodern-workspace/versions.cjs +161 -0
  31. package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +154 -0
  32. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +197 -0
  33. package/dist/esm/create-package-root.js +14 -0
  34. package/dist/esm/index.js +621 -0
  35. package/dist/esm/locale/en.js +63 -0
  36. package/dist/esm/locale/index.js +9 -0
  37. package/dist/esm/locale/zh.js +63 -0
  38. package/dist/esm/ultramodern-package-source.js +63 -0
  39. package/dist/esm/ultramodern-workspace/add-vertical.js +511 -0
  40. package/dist/esm/ultramodern-workspace/app-files.js +149 -0
  41. package/dist/esm/ultramodern-workspace/codesmith.js +86 -0
  42. package/dist/esm/ultramodern-workspace/contracts.js +742 -0
  43. package/dist/esm/ultramodern-workspace/demo-components.js +363 -0
  44. package/dist/esm/ultramodern-workspace/descriptors.js +133 -0
  45. package/dist/esm/ultramodern-workspace/effect-api.js +854 -0
  46. package/dist/esm/ultramodern-workspace/fs-io.js +90 -0
  47. package/dist/esm/ultramodern-workspace/generation-result.js +102 -0
  48. package/dist/esm/ultramodern-workspace/index.js +3 -0
  49. package/dist/esm/ultramodern-workspace/locales.js +122 -0
  50. package/dist/esm/ultramodern-workspace/module-federation.js +415 -0
  51. package/dist/esm/ultramodern-workspace/naming.js +71 -0
  52. package/dist/esm/ultramodern-workspace/overlays.js +79 -0
  53. package/dist/esm/ultramodern-workspace/package-json.js +338 -0
  54. package/dist/esm/ultramodern-workspace/package-source.js +21 -0
  55. package/dist/esm/ultramodern-workspace/policy.js +183 -0
  56. package/dist/esm/ultramodern-workspace/public-api.js +2 -0
  57. package/dist/esm/ultramodern-workspace/public-surface.js +183 -0
  58. package/dist/esm/ultramodern-workspace/routes.js +280 -0
  59. package/dist/esm/ultramodern-workspace/types.js +16 -0
  60. package/dist/esm/ultramodern-workspace/versions.js +36 -0
  61. package/dist/esm/ultramodern-workspace/workspace-scripts.js +92 -0
  62. package/dist/esm/ultramodern-workspace/write-workspace.js +143 -0
  63. package/dist/esm-node/create-package-root.js +15 -0
  64. package/dist/esm-node/index.js +622 -0
  65. package/dist/esm-node/locale/en.js +64 -0
  66. package/dist/esm-node/locale/index.js +10 -0
  67. package/dist/esm-node/locale/zh.js +64 -0
  68. package/dist/esm-node/ultramodern-package-source.js +64 -0
  69. package/dist/esm-node/ultramodern-workspace/add-vertical.js +512 -0
  70. package/dist/esm-node/ultramodern-workspace/app-files.js +150 -0
  71. package/dist/esm-node/ultramodern-workspace/codesmith.js +87 -0
  72. package/dist/esm-node/ultramodern-workspace/contracts.js +743 -0
  73. package/dist/esm-node/ultramodern-workspace/demo-components.js +364 -0
  74. package/dist/esm-node/ultramodern-workspace/descriptors.js +134 -0
  75. package/dist/esm-node/ultramodern-workspace/effect-api.js +855 -0
  76. package/dist/esm-node/ultramodern-workspace/fs-io.js +91 -0
  77. package/dist/esm-node/ultramodern-workspace/generation-result.js +103 -0
  78. package/dist/esm-node/ultramodern-workspace/index.js +4 -0
  79. package/dist/esm-node/ultramodern-workspace/locales.js +123 -0
  80. package/dist/esm-node/ultramodern-workspace/module-federation.js +416 -0
  81. package/dist/esm-node/ultramodern-workspace/naming.js +72 -0
  82. package/dist/esm-node/ultramodern-workspace/overlays.js +80 -0
  83. package/dist/esm-node/ultramodern-workspace/package-json.js +339 -0
  84. package/dist/esm-node/ultramodern-workspace/package-source.js +22 -0
  85. package/dist/esm-node/ultramodern-workspace/policy.js +184 -0
  86. package/dist/esm-node/ultramodern-workspace/public-api.js +3 -0
  87. package/dist/esm-node/ultramodern-workspace/public-surface.js +184 -0
  88. package/dist/esm-node/ultramodern-workspace/routes.js +281 -0
  89. package/dist/esm-node/ultramodern-workspace/types.js +17 -0
  90. package/dist/esm-node/ultramodern-workspace/versions.js +37 -0
  91. package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +93 -0
  92. package/dist/esm-node/ultramodern-workspace/write-workspace.js +144 -0
  93. package/dist/types/create-package-root.d.ts +1 -0
  94. package/dist/types/locale/en.d.ts +12 -8
  95. package/dist/types/locale/index.d.ts +125 -2
  96. package/dist/types/locale/zh.d.ts +12 -8
  97. package/dist/types/ultramodern-package-source.d.ts +28 -0
  98. package/dist/types/ultramodern-workspace/add-vertical.d.ts +36 -0
  99. package/dist/types/ultramodern-workspace/app-files.d.ts +14 -0
  100. package/dist/types/ultramodern-workspace/codesmith.d.ts +53 -0
  101. package/dist/types/ultramodern-workspace/contracts.d.ts +21 -0
  102. package/dist/types/ultramodern-workspace/demo-components.d.ts +9 -0
  103. package/dist/types/ultramodern-workspace/descriptors.d.ts +39 -0
  104. package/dist/types/ultramodern-workspace/effect-api.d.ts +73 -0
  105. package/dist/types/ultramodern-workspace/fs-io.d.ts +18 -0
  106. package/dist/types/ultramodern-workspace/generation-result.d.ts +14 -0
  107. package/dist/types/ultramodern-workspace/index.d.ts +4 -0
  108. package/dist/types/ultramodern-workspace/locales.d.ts +183 -0
  109. package/dist/types/ultramodern-workspace/module-federation.d.ts +16 -0
  110. package/dist/types/ultramodern-workspace/naming.d.ts +16 -0
  111. package/dist/types/ultramodern-workspace/overlays.d.ts +6 -0
  112. package/dist/types/ultramodern-workspace/package-json.d.ts +12 -0
  113. package/dist/types/ultramodern-workspace/package-source.d.ts +2 -0
  114. package/dist/types/ultramodern-workspace/policy.d.ts +60 -0
  115. package/dist/types/ultramodern-workspace/public-api.d.ts +3 -0
  116. package/dist/types/ultramodern-workspace/public-surface.d.ts +37 -0
  117. package/dist/types/ultramodern-workspace/routes.d.ts +25 -0
  118. package/dist/types/ultramodern-workspace/types.d.ts +197 -0
  119. package/dist/types/ultramodern-workspace/versions.d.ts +40 -0
  120. package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +10 -0
  121. package/dist/types/ultramodern-workspace/write-workspace.d.ts +4 -0
  122. package/package.json +58 -15
  123. package/template-workspace/.github/workflows/ultramodern-workspace-gates.yml.handlebars +23 -10
  124. package/template-workspace/.mise.toml.handlebars +1 -0
  125. package/template-workspace/{AGENTS.md → AGENTS.md.handlebars} +20 -9
  126. package/template-workspace/README.md.handlebars +85 -14
  127. package/template-workspace/lefthook.yml +18 -4
  128. package/template-workspace/pnpm-workspace.yaml.handlebars +45 -0
  129. package/template-workspace/scripts/bootstrap-agent-skills.mjs +69 -75
  130. package/template-workspace/scripts/setup-agent-reference-repos.mjs +8 -6
  131. package/templates/app/shell-frame.tsx +49 -0
  132. package/templates/app/ultramodern-route-head.tsx.handlebars +142 -0
  133. package/templates/packages/shared-contracts-index.ts +466 -0
  134. package/templates/workspace-scripts/assert-mf-types.mjs.handlebars +69 -0
  135. package/templates/workspace-scripts/check-ultramodern-i18n-boundaries.mjs +9 -0
  136. package/templates/workspace-scripts/generate-public-surface-assets.mjs +529 -0
  137. package/templates/workspace-scripts/proof-cloudflare-version.mjs +125 -0
  138. package/templates/workspace-scripts/ultramodern-cloudflare-proof.mjs +851 -0
  139. package/templates/workspace-scripts/ultramodern-performance-readiness.config.mjs +7 -0
  140. package/templates/workspace-scripts/ultramodern-performance-readiness.mjs +223 -0
  141. package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +986 -0
  142. package/dist/index.js +0 -6625
  143. package/dist/types/ultramodern-workspace.d.ts +0 -31
  144. package/template/.agents/skills-lock.json +0 -34
  145. package/template/.browserslistrc +0 -4
  146. package/template/.codex/hooks.json +0 -16
  147. package/template/.github/renovate.json +0 -53
  148. package/template/.github/workflows/ultramodern-gates.yml.handlebars +0 -54
  149. package/template/.gitignore.handlebars +0 -30
  150. package/template/.mise.toml.handlebars +0 -2
  151. package/template/.nvmrc +0 -2
  152. package/template/AGENTS.md +0 -23
  153. package/template/README.md +0 -105
  154. package/template/api/effect/index.ts.handlebars +0 -34
  155. package/template/api/lambda/hello.ts.handlebars +0 -6
  156. package/template/config/public/locales/cs/translation.json +0 -39
  157. package/template/config/public/locales/en/translation.json +0 -39
  158. package/template/lefthook.yml +0 -10
  159. package/template/modern.config.ts.handlebars +0 -71
  160. package/template/oxfmt.config.ts +0 -15
  161. package/template/oxlint.config.ts +0 -19
  162. package/template/package.json.handlebars +0 -66
  163. package/template/pnpm-workspace.yaml +0 -29
  164. package/template/postcss.config.mjs.handlebars +0 -6
  165. package/template/rstest.config.mts +0 -5
  166. package/template/scripts/bootstrap-agent-skills.mjs +0 -228
  167. package/template/scripts/check-i18n-strings.mjs +0 -94
  168. package/template/scripts/validate-ultramodern.mjs.handlebars +0 -538
  169. package/template/shared/effect/api.ts.handlebars +0 -17
  170. package/template/src/modern-app-env.d.ts +0 -3
  171. package/template/src/modern.runtime.ts.handlebars +0 -23
  172. package/template/src/routes/[lang]/page.tsx.handlebars +0 -211
  173. package/template/src/routes/index.css.handlebars +0 -129
  174. package/template/src/routes/layout.tsx.handlebars +0 -10
  175. package/template/tailwind.config.ts.handlebars +0 -10
  176. package/template/tests/tsconfig.json +0 -7
  177. package/template/tests/ultramodern.contract.test.ts.handlebars +0 -78
  178. package/template/tsconfig.json +0 -120
  179. package/template-workspace/pnpm-workspace.yaml +0 -35
@@ -0,0 +1,603 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.n = (module)=>{
5
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
6
+ __webpack_require__.d(getter, {
7
+ a: getter
8
+ });
9
+ return getter;
10
+ };
11
+ })();
12
+ (()=>{
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
22
+ };
23
+ })();
24
+ (()=>{
25
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
26
+ })();
27
+ (()=>{
28
+ __webpack_require__.r = (exports1)=>{
29
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
30
+ value: 'Module'
31
+ });
32
+ Object.defineProperty(exports1, '__esModule', {
33
+ value: true
34
+ });
35
+ };
36
+ })();
37
+ var __webpack_exports__ = {};
38
+ __webpack_require__.r(__webpack_exports__);
39
+ __webpack_require__.d(__webpack_exports__, {
40
+ addShellWorkspaceDependency: ()=>addShellWorkspaceDependency,
41
+ addShellZephyrDependency: ()=>addShellZephyrDependency,
42
+ addUltramodernVertical: ()=>addUltramodernVertical,
43
+ assertCanCreate: ()=>assertCanCreate,
44
+ assertValidVerticalName: ()=>assertValidVerticalName,
45
+ existingPackageSource: ()=>existingPackageSource,
46
+ existingTailwindEnabled: ()=>existingTailwindEnabled,
47
+ nextAvailablePort: ()=>nextAvailablePort,
48
+ ownershipEntry: ()=>ownershipEntry,
49
+ planUltramodernVertical: ()=>planUltramodernVertical,
50
+ prepareAddUltramodernVertical: ()=>prepareAddUltramodernVertical,
51
+ rewriteShellAppFiles: ()=>rewriteShellAppFiles,
52
+ updateRootWorkspaceScripts: ()=>updateRootWorkspaceScripts,
53
+ verticalTopologyEntry: ()=>verticalTopologyEntry,
54
+ verticalsFromTopology: ()=>verticalsFromTopology
55
+ });
56
+ const external_node_fs_namespaceObject = require("node:fs");
57
+ var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
58
+ const external_node_os_namespaceObject = require("node:os");
59
+ var external_node_os_default = /*#__PURE__*/ __webpack_require__.n(external_node_os_namespaceObject);
60
+ const external_node_path_namespaceObject = require("node:path");
61
+ var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
62
+ const external_ultramodern_package_source_cjs_namespaceObject = require("../ultramodern-package-source.cjs");
63
+ const external_app_files_cjs_namespaceObject = require("./app-files.cjs");
64
+ const external_contracts_cjs_namespaceObject = require("./contracts.cjs");
65
+ const external_demo_components_cjs_namespaceObject = require("./demo-components.cjs");
66
+ const external_descriptors_cjs_namespaceObject = require("./descriptors.cjs");
67
+ const external_effect_api_cjs_namespaceObject = require("./effect-api.cjs");
68
+ const external_fs_io_cjs_namespaceObject = require("./fs-io.cjs");
69
+ const external_generation_result_cjs_namespaceObject = require("./generation-result.cjs");
70
+ const external_locales_cjs_namespaceObject = require("./locales.cjs");
71
+ const external_module_federation_cjs_namespaceObject = require("./module-federation.cjs");
72
+ const external_naming_cjs_namespaceObject = require("./naming.cjs");
73
+ const external_overlays_cjs_namespaceObject = require("./overlays.cjs");
74
+ const external_package_json_cjs_namespaceObject = require("./package-json.cjs");
75
+ const external_package_source_cjs_namespaceObject = require("./package-source.cjs");
76
+ const external_policy_cjs_namespaceObject = require("./policy.cjs");
77
+ const external_public_surface_cjs_namespaceObject = require("./public-surface.cjs");
78
+ const external_types_cjs_namespaceObject = require("./types.cjs");
79
+ const external_workspace_scripts_cjs_namespaceObject = require("./workspace-scripts.cjs");
80
+ const external_write_workspace_cjs_namespaceObject = require("./write-workspace.cjs");
81
+ const FIRST_VERTICAL_PORT = 4101;
82
+ const TOPOLOGY_PATH = 'topology/reference-topology.json';
83
+ const OWNERSHIP_PATH = 'topology/ownership.json';
84
+ const DEVELOPMENT_OVERLAY_PATH = 'topology/local-overlays/development.json';
85
+ const PACKAGE_SOURCE_METADATA_PATH = '.modernjs/ultramodern-package-source.json';
86
+ function existingPackageSource(workspaceRoot, modernVersion, packageSource) {
87
+ if (packageSource) return (0, external_package_source_cjs_namespaceObject.resolvePackageSource)({
88
+ targetDir: workspaceRoot,
89
+ packageName: external_node_path_default().basename(workspaceRoot),
90
+ modernVersion,
91
+ packageSource
92
+ });
93
+ const metadataPath = external_node_path_default().join(workspaceRoot, '.modernjs/ultramodern-package-source.json');
94
+ if (!external_node_fs_default().existsSync(metadataPath)) return (0, external_package_source_cjs_namespaceObject.resolvePackageSource)({
95
+ targetDir: workspaceRoot,
96
+ packageName: external_node_path_default().basename(workspaceRoot),
97
+ modernVersion
98
+ });
99
+ const metadata = (0, external_fs_io_cjs_namespaceObject.readJsonFile)(metadataPath);
100
+ const aliases = metadata.modernPackages?.aliases ?? {};
101
+ const firstAlias = Object.values(aliases).find((value)=>'string' == typeof value);
102
+ const firstPackage = Object.keys(aliases)[0];
103
+ const aliasScope = firstAlias?.match(/^@([^/]+)\//)?.[1];
104
+ const unscopedName = firstPackage?.split('/').at(-1) ?? '';
105
+ const aliasUnscopedName = firstAlias?.split('/').at(-1) ?? '';
106
+ const aliasPackageNamePrefix = aliasUnscopedName && unscopedName && aliasUnscopedName.endsWith(unscopedName) ? aliasUnscopedName.slice(0, -unscopedName.length) : void 0;
107
+ return {
108
+ strategy: 'install' === metadata.strategy ? 'install' : 'workspace',
109
+ modernPackageVersion: 'string' == typeof metadata.modernPackages?.specifier ? metadata.modernPackages.specifier : modernVersion,
110
+ registry: metadata.modernPackages?.registry,
111
+ aliasScope,
112
+ aliasPackageNamePrefix
113
+ };
114
+ }
115
+ function existingTailwindEnabled(workspaceRoot) {
116
+ const contractPath = external_node_path_default().join(workspaceRoot, external_descriptors_cjs_namespaceObject.GENERATED_CONTRACT_PATH);
117
+ if (!external_node_fs_default().existsSync(contractPath)) return true;
118
+ const contract = (0, external_fs_io_cjs_namespaceObject.readJsonFile)(contractPath);
119
+ const apps = (0, external_types_cjs_namespaceObject.isRecord)(contract) && Array.isArray(contract.apps) ? contract.apps : [];
120
+ const shell = apps.find((app)=>(0, external_types_cjs_namespaceObject.isRecord)(app) && app.id === external_descriptors_cjs_namespaceObject.shellApp.id);
121
+ return shell?.styling && (0, external_types_cjs_namespaceObject.isRecord)(shell.styling) ? false !== shell.styling.tailwind : true;
122
+ }
123
+ function assertValidVerticalName(name) {
124
+ const normalized = (0, external_naming_cjs_namespaceObject.toKebabCase)(name);
125
+ if (!normalized || normalized !== name) throw new Error(`Invalid Vertical name "${name}". Use lowercase kebab-case.`);
126
+ return normalized;
127
+ }
128
+ function nextAvailablePort(ports) {
129
+ const numericPorts = Object.values(ports).filter((value)=>'number' == typeof value && Number.isFinite(value));
130
+ return Math.max(FIRST_VERTICAL_PORT - 1, ...numericPorts) + 1;
131
+ }
132
+ function assertCanCreate(workspaceRoot, relativePath) {
133
+ if (external_node_fs_default().existsSync(external_node_path_default().join(workspaceRoot, relativePath))) throw new Error(`Refusing to overwrite existing path: ${relativePath}`);
134
+ }
135
+ function updateRootWorkspaceScripts(workspaceRoot, scope, packageSource, remotes) {
136
+ const packagePath = external_node_path_default().join(workspaceRoot, 'package.json');
137
+ const rootPackage = (0, external_fs_io_cjs_namespaceObject.readJsonFile)(packagePath);
138
+ const generatedRootPackage = (0, external_package_json_cjs_namespaceObject.createRootPackageJson)(scope, packageSource, remotes);
139
+ rootPackage.scripts = generatedRootPackage.scripts;
140
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(packagePath, rootPackage);
141
+ }
142
+ function rewriteShellAppFiles(workspaceRoot, scope, packageSource, enableTailwind, remotes) {
143
+ const shellHost = (0, external_descriptors_cjs_namespaceObject.createShellHost)(remotes);
144
+ const publicWeb = (0, external_public_surface_cjs_namespaceObject.createPublicWebAppArtifacts)(shellHost);
145
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(external_node_path_default().join(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/package.json`), (0, external_package_json_cjs_namespaceObject.createAppPackage)(scope, shellHost, packageSource, enableTailwind, remotes));
146
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/src/modern-app-env.d.ts`, (0, external_app_files_cjs_namespaceObject.createAppEnvDts)(shellHost, remotes));
147
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, publicWeb.jsonLdHelperFile.path, publicWeb.jsonLdHelperFile.content);
148
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, publicWeb.routeMetadataFile.path, publicWeb.routeMetadataFile.content);
149
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, publicWeb.routeHeadFile.path, publicWeb.routeHeadFile.content);
150
+ for (const generatedFile of publicWeb.routeMetaFiles)(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, generatedFile.path, generatedFile.content);
151
+ (0, external_public_surface_cjs_namespaceObject.rewriteWorkspaceAssetsForApp)(workspaceRoot, shellHost);
152
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/src/modern.runtime.ts`, (0, external_app_files_cjs_namespaceObject.createAppRuntimeConfig)(shellHost, scope, remotes));
153
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(external_node_path_default().join(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/locales/en/translation.json`), (0, external_locales_cjs_namespaceObject.createAppPublicLocaleMessages)(shellHost, 'en', remotes));
154
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(external_node_path_default().join(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/locales/en/${(0, external_descriptors_cjs_namespaceObject.appI18nNamespace)(shellHost)}.json`), (0, external_locales_cjs_namespaceObject.createAppPublicLocaleMessages)(shellHost, 'en', remotes));
155
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(external_node_path_default().join(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/locales/cs/translation.json`), (0, external_locales_cjs_namespaceObject.createAppPublicLocaleMessages)(shellHost, 'cs', remotes));
156
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(external_node_path_default().join(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/locales/cs/${(0, external_descriptors_cjs_namespaceObject.appI18nNamespace)(shellHost)}.json`), (0, external_locales_cjs_namespaceObject.createAppPublicLocaleMessages)(shellHost, 'cs', remotes));
157
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/module-federation.config.ts`, (0, external_module_federation_cjs_namespaceObject.createShellModuleFederationConfig)(scope, remotes));
158
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/src/routes/[lang]/page.tsx`, (0, external_demo_components_cjs_namespaceObject.createShellPage)(remotes));
159
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/src/routes/vertical-components.tsx`, (0, external_demo_components_cjs_namespaceObject.createShellRemoteComponents)(scope, remotes));
160
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/src/routes/shell-frame.tsx`, (0, external_app_files_cjs_namespaceObject.createShellFrameComponent)());
161
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/src/effect/vertical-clients.ts`, (0, external_effect_api_cjs_namespaceObject.createShellEffectClient)(scope, remotes));
162
+ }
163
+ function addShellZephyrDependency(workspaceRoot, scope, remote) {
164
+ const packagePath = external_node_path_default().join(workspaceRoot, external_descriptors_cjs_namespaceObject.shellApp.directory, 'package.json');
165
+ const shellPackage = (0, external_fs_io_cjs_namespaceObject.readJsonFile)(packagePath);
166
+ shellPackage['zephyr:dependencies'] ??= {};
167
+ shellPackage['zephyr:dependencies'][(0, external_descriptors_cjs_namespaceObject.remoteDependencyAlias)(remote)] = (0, external_descriptors_cjs_namespaceObject.zephyrRemoteDependency)(scope, remote);
168
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(packagePath, shellPackage);
169
+ }
170
+ function addShellWorkspaceDependency(workspaceRoot, scope, remote) {
171
+ if (!(0, external_descriptors_cjs_namespaceObject.appHasEffectApi)(remote)) return;
172
+ const packagePath = external_node_path_default().join(workspaceRoot, external_descriptors_cjs_namespaceObject.shellApp.directory, 'package.json');
173
+ const shellPackage = (0, external_fs_io_cjs_namespaceObject.readJsonFile)(packagePath);
174
+ shellPackage.dependencies ??= {};
175
+ shellPackage.dependencies[(0, external_naming_cjs_namespaceObject.packageName)(scope, remote.packageSuffix)] = external_ultramodern_package_source_cjs_namespaceObject.WORKSPACE_PACKAGE_VERSION;
176
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(packagePath, shellPackage);
177
+ }
178
+ function verticalTopologyEntry(scope, vertical, remotes = []) {
179
+ return {
180
+ id: vertical.id,
181
+ kind: vertical.kind,
182
+ domain: vertical.domain,
183
+ package: (0, external_naming_cjs_namespaceObject.packageName)(scope, vertical.packageSuffix),
184
+ path: vertical.directory,
185
+ moduleFederation: {
186
+ role: 'remote',
187
+ name: vertical.mfName,
188
+ manifestUrl: `http://localhost:${vertical.port}/mf-manifest.json`,
189
+ exposes: Object.keys(vertical.exposes ?? {}),
190
+ ...vertical.verticalRefs?.length ? {
191
+ verticalRefs: vertical.verticalRefs,
192
+ remotes: (0, external_descriptors_cjs_namespaceObject.createModuleFederationRemoteContracts)(vertical, remotes)
193
+ } : {},
194
+ ssr: true,
195
+ fallbackTelemetryEvent: 'modernjs:mv-runtime-parity',
196
+ sharedContractVersion: 'mf-ssr-contract-v1'
197
+ },
198
+ ...(0, external_effect_api_cjs_namespaceObject.effectApiTopologyMetadata)(vertical) ? {
199
+ api: (0, external_effect_api_cjs_namespaceObject.effectApiTopologyMetadata)(vertical)
200
+ } : {},
201
+ cloudflare: (0, external_policy_cjs_namespaceObject.createCloudflareDeployContract)(scope, vertical),
202
+ ownership: vertical.ownership
203
+ };
204
+ }
205
+ function ownershipEntry(scope, owner) {
206
+ return {
207
+ id: owner.id,
208
+ package: (0, external_naming_cjs_namespaceObject.packageName)(scope, owner.packageSuffix),
209
+ path: owner.directory,
210
+ ownership: owner.ownership
211
+ };
212
+ }
213
+ function verticalsFromTopology(topology, ports) {
214
+ return (topology.verticals ?? []).map((vertical)=>{
215
+ const domain = vertical.domain ?? String(vertical.id);
216
+ const packageSuffix = vertical.package?.split('/').at(-1) ?? domain;
217
+ const effectApi = vertical.api?.effect ? {
218
+ stem: 'string' == typeof vertical.api.effect.basePath ? vertical.api.effect.basePath.split('/').filter(Boolean).at(-1) ?? domain : domain,
219
+ prefix: vertical.api.effect.bff?.prefix ?? `/${domain}-api`,
220
+ consumedBy: Array.isArray(vertical.api.effect.consumedBy) ? vertical.api.effect.consumedBy : [
221
+ external_descriptors_cjs_namespaceObject.shellApp.id,
222
+ vertical.id
223
+ ]
224
+ } : void 0;
225
+ return {
226
+ id: vertical.id,
227
+ directory: 'string' == typeof vertical.path ? vertical.path : `verticals/${domain}`,
228
+ packageSuffix,
229
+ displayName: vertical.displayName ?? `${(0, external_naming_cjs_namespaceObject.toPascalCase)(domain)} Vertical`,
230
+ kind: 'vertical',
231
+ domain,
232
+ portEnv: `VERTICAL_${(0, external_naming_cjs_namespaceObject.toEnvSegment)(domain)}_PORT`,
233
+ port: 'number' == typeof ports[vertical.id] ? ports[vertical.id] : 0,
234
+ mfName: vertical.moduleFederation?.name ?? `vertical${(0, external_naming_cjs_namespaceObject.toPascalCase)(domain)}`,
235
+ ...Array.isArray(vertical.moduleFederation?.exposes) ? {
236
+ exposes: Object.fromEntries(vertical.moduleFederation.exposes.map((expose)=>[
237
+ expose,
238
+ './Route' === expose ? './src/federation-entry.tsx' : './Widget' === expose ? `./src/components/${domain}-widget.tsx` : ''
239
+ ]))
240
+ } : {},
241
+ ...Array.isArray(vertical.moduleFederation?.verticalRefs) ? {
242
+ verticalRefs: vertical.moduleFederation.verticalRefs
243
+ } : Array.isArray(vertical.moduleFederation?.remotes) ? {
244
+ verticalRefs: vertical.moduleFederation.remotes.map((entry)=>entry.id).filter((id)=>'string' == typeof id)
245
+ } : {},
246
+ ...effectApi ? {
247
+ effectApi
248
+ } : {},
249
+ ownership: vertical.ownership ?? (0, external_descriptors_cjs_namespaceObject.createNeutralOwnership)(vertical.id)
250
+ };
251
+ });
252
+ }
253
+ function prepareAddUltramodernVertical(options) {
254
+ const name = assertValidVerticalName(options.name);
255
+ const topologyPath = external_node_path_default().join(options.workspaceRoot, TOPOLOGY_PATH);
256
+ const ownershipPath = external_node_path_default().join(options.workspaceRoot, OWNERSHIP_PATH);
257
+ const overlayPath = external_node_path_default().join(options.workspaceRoot, DEVELOPMENT_OVERLAY_PATH);
258
+ const rootPackage = readRequiredJsonObject(external_node_path_default().join(options.workspaceRoot, 'package.json'));
259
+ const topology = readRequiredJsonObject(topologyPath);
260
+ const ownership = readRequiredJsonObject(ownershipPath);
261
+ const overlay = readRequiredJsonObject(overlayPath);
262
+ readRequiredJsonObject(external_node_path_default().join(options.workspaceRoot, external_descriptors_cjs_namespaceObject.GENERATED_CONTRACT_PATH));
263
+ readRequiredJsonObject(external_node_path_default().join(options.workspaceRoot, PACKAGE_SOURCE_METADATA_PATH));
264
+ assertOptionalJsonObject(topology.shell, 'topology.shell', topologyPath);
265
+ assertOptionalJsonArray(topology.verticals, 'topology.verticals', topologyPath);
266
+ assertOptionalJsonArray(ownership.owners, 'ownership.owners', ownershipPath);
267
+ assertOptionalJsonObject(overlay.ports, 'overlay.ports', overlayPath);
268
+ assertOptionalJsonObject(overlay.manifests, 'overlay.manifests', overlayPath);
269
+ assertOptionalJsonObject(overlay.apis, 'overlay.apis', overlayPath);
270
+ overlay.ports ??= {};
271
+ const scope = (0, external_naming_cjs_namespaceObject.toPackageScope)(String(rootPackage.name ?? external_node_path_default().basename(options.workspaceRoot)));
272
+ const packageSource = existingPackageSource(options.workspaceRoot, options.modernVersion, options.packageSource);
273
+ const enableTailwind = options.enableTailwind ?? existingTailwindEnabled(options.workspaceRoot);
274
+ const existingVerticals = verticalsFromTopology(topology, overlay.ports);
275
+ const port = nextAvailablePort(overlay.ports);
276
+ const vertical = (0, external_descriptors_cjs_namespaceObject.createVerticalDescriptor)(name, port);
277
+ const updatedVerticals = [
278
+ ...existingVerticals,
279
+ vertical
280
+ ];
281
+ const allApps = [
282
+ external_descriptors_cjs_namespaceObject.shellApp,
283
+ ...updatedVerticals
284
+ ];
285
+ assertCanCreate(options.workspaceRoot, vertical.directory);
286
+ validateWorkspaceAppDescriptors(allApps);
287
+ validateUniqueWorkspaceAppDescriptors(allApps);
288
+ (0, external_naming_cjs_namespaceObject.assertUniqueTailwindPrefixes)(allApps);
289
+ return {
290
+ name,
291
+ scope,
292
+ topologyPath,
293
+ ownershipPath,
294
+ overlayPath,
295
+ rootPackage,
296
+ topology,
297
+ ownership,
298
+ overlay,
299
+ packageSource,
300
+ enableTailwind,
301
+ vertical,
302
+ updatedVerticals
303
+ };
304
+ }
305
+ function readRequiredJsonObject(filePath) {
306
+ if (!external_node_fs_default().existsSync(filePath)) throw new Error(`Missing UltraModern workspace file: ${filePath}`);
307
+ const value = (0, external_fs_io_cjs_namespaceObject.readJsonFile)(filePath);
308
+ if (!(0, external_types_cjs_namespaceObject.isRecord)(value)) throw new Error(`UltraModern workspace file must contain a JSON object: ${filePath}`);
309
+ return value;
310
+ }
311
+ function assertOptionalJsonObject(value, label, filePath) {
312
+ if (void 0 !== value && !(0, external_types_cjs_namespaceObject.isRecord)(value)) throw new Error(`${label} in ${filePath} must be a JSON object`);
313
+ }
314
+ function assertOptionalJsonArray(value, label, filePath) {
315
+ if (void 0 !== value && !Array.isArray(value)) throw new Error(`${label} in ${filePath} must be a JSON array`);
316
+ }
317
+ function validateWorkspaceAppDescriptors(apps) {
318
+ for (const app of apps){
319
+ const appLabel = 'string' == typeof app.id && app.id ? app.id : '<unknown>';
320
+ assertNonEmptyString(app.id, `app id for ${appLabel}`);
321
+ assertNonEmptyString(app.directory, `directory for ${appLabel}`);
322
+ assertSafeOutputPath(app.directory, appLabel);
323
+ assertNonEmptyString(app.packageSuffix, `package suffix for ${appLabel}`);
324
+ assertNonEmptyString(app.displayName, `display name for ${appLabel}`);
325
+ if ('shell' !== app.kind && 'vertical' !== app.kind) throw new Error(`Invalid app kind for ${appLabel}: ${String(app.kind)}`);
326
+ assertNonEmptyString(app.portEnv, `port env for ${appLabel}`);
327
+ if ('number' != typeof app.port || !Number.isFinite(app.port) || app.port <= 0) throw new Error(`Invalid development port for ${appLabel}`);
328
+ assertNonEmptyString(app.mfName, `Module Federation name for ${appLabel}`);
329
+ if (app.effectApi) {
330
+ assertNonEmptyString(app.effectApi.prefix, `Effect API prefix for ${appLabel}`);
331
+ if (!app.effectApi.prefix.startsWith('/')) throw new Error(`Effect API prefix for ${appLabel} must start with "/"`);
332
+ }
333
+ }
334
+ }
335
+ function validateUniqueWorkspaceAppDescriptors(apps) {
336
+ assertUniqueAppField(apps, 'app id', (app)=>app.id);
337
+ assertUniqueAppField(apps, 'package suffix', (app)=>app.packageSuffix);
338
+ assertUniqueAppField(apps, 'output path', (app)=>(0, external_naming_cjs_namespaceObject.normalizePath)(app.directory));
339
+ assertUniqueAppField(apps, 'Module Federation name', (app)=>app.mfName);
340
+ assertUniqueAppField(apps, 'development port', (app)=>String(app.port));
341
+ assertUniqueAppField(apps, 'Effect API prefix', (app)=>app.effectApi?.prefix);
342
+ assertUniqueAppField(apps, 'manifest environment name', (app)=>'vertical' === app.kind ? (0, external_descriptors_cjs_namespaceObject.createRemoteManifestEnv)(app) : void 0);
343
+ }
344
+ function assertUniqueAppField(apps, label, readValue) {
345
+ const seen = new Map();
346
+ for (const app of apps){
347
+ const value = readValue(app);
348
+ if (!value) continue;
349
+ const previousId = seen.get(value);
350
+ if (previousId) throw new Error(`Duplicate ${label} "${value}" for ${previousId} and ${app.id}`);
351
+ seen.set(value, app.id);
352
+ }
353
+ }
354
+ function assertNonEmptyString(value, label) {
355
+ if ('string' != typeof value || 0 === value.length) throw new Error(`Invalid ${label}`);
356
+ }
357
+ function assertSafeOutputPath(relativePath, appId) {
358
+ if (external_node_path_default().isAbsolute(relativePath) || relativePath.split(/[\\/]+/u).includes('..')) throw new Error(`Unsafe output path for ${appId}: ${relativePath}`);
359
+ }
360
+ function planUltramodernVertical(options) {
361
+ const preflight = prepareAddUltramodernVertical(options);
362
+ const tempRoot = external_node_fs_default().mkdtempSync(external_node_path_default().join(external_node_os_default().tmpdir(), 'um-vertical-plan-'));
363
+ const copiedWorkspaceRoot = external_node_path_default().join(tempRoot, 'workspace');
364
+ try {
365
+ copyWorkspaceForPlan(options.workspaceRoot, copiedWorkspaceRoot);
366
+ const plannedResult = addUltramodernVertical({
367
+ ...options,
368
+ workspaceRoot: copiedWorkspaceRoot,
369
+ overlays: void 0
370
+ });
371
+ return createVerticalPlan(preflight, {
372
+ ...plannedResult,
373
+ workspaceRoot: options.workspaceRoot
374
+ });
375
+ } finally{
376
+ external_node_fs_default().rmSync(tempRoot, {
377
+ recursive: true,
378
+ force: true
379
+ });
380
+ }
381
+ }
382
+ function copyWorkspaceForPlan(workspaceRoot, copiedWorkspaceRoot) {
383
+ const skippedDirectories = new Set([
384
+ '.git',
385
+ '.nx',
386
+ '.output',
387
+ 'coverage',
388
+ 'dist',
389
+ 'node_modules'
390
+ ]);
391
+ external_node_fs_default().cpSync(workspaceRoot, copiedWorkspaceRoot, {
392
+ recursive: true,
393
+ filter: (sourcePath)=>!skippedDirectories.has(external_node_path_default().basename(sourcePath))
394
+ });
395
+ }
396
+ function createVerticalPlan(preflight, result) {
397
+ const { scope, vertical, updatedVerticals } = preflight;
398
+ const manifestUrl = `http://localhost:${vertical.port}/mf-manifest.json`;
399
+ return {
400
+ ...result,
401
+ dryRun: true,
402
+ selectedPort: vertical.port,
403
+ moduleFederationRemote: {
404
+ id: vertical.id,
405
+ name: vertical.mfName,
406
+ manifestUrl
407
+ },
408
+ ...vertical.effectApi ? {
409
+ effectApiPrefix: (0, external_descriptors_cjs_namespaceObject.effectApiPrefix)(vertical)
410
+ } : {},
411
+ jsonMutations: createDryRunJsonMutations(preflight, manifestUrl),
412
+ shellDependencyChanges: createShellDependencyChanges(scope, vertical),
413
+ generatedContractChanges: [
414
+ {
415
+ path: external_descriptors_cjs_namespaceObject.GENERATED_CONTRACT_PATH,
416
+ addedAppIds: [
417
+ vertical.id
418
+ ],
419
+ shellVerticalRefs: updatedVerticals.map((vertical)=>vertical.id)
420
+ }
421
+ ]
422
+ };
423
+ }
424
+ function createDryRunJsonMutations(preflight, manifestUrl) {
425
+ const { scope, vertical } = preflight;
426
+ const effectApiMutation = (0, external_descriptors_cjs_namespaceObject.appHasEffectApi)(vertical) ? [
427
+ {
428
+ path: DEVELOPMENT_OVERLAY_PATH,
429
+ pointer: `/apis/${vertical.id}`,
430
+ description: `Add local Effect API URL for ${vertical.id}`,
431
+ value: `http://localhost:${vertical.port}${(0, external_descriptors_cjs_namespaceObject.effectApiPrefix)(vertical)}`
432
+ }
433
+ ] : [];
434
+ return [
435
+ {
436
+ path: TOPOLOGY_PATH,
437
+ pointer: '/shell/verticalRefs/-',
438
+ description: `Add ${vertical.id} to the shell vertical references`,
439
+ value: vertical.id
440
+ },
441
+ {
442
+ path: TOPOLOGY_PATH,
443
+ pointer: '/shell/moduleFederation/remotes/-',
444
+ description: `Register ${vertical.id} as a Module Federation remote`,
445
+ value: {
446
+ id: vertical.id,
447
+ name: vertical.mfName,
448
+ manifestUrl
449
+ }
450
+ },
451
+ {
452
+ path: TOPOLOGY_PATH,
453
+ pointer: '/verticals/-',
454
+ description: `Add topology entry for ${vertical.id}`,
455
+ value: verticalTopologyEntry(scope, vertical)
456
+ },
457
+ {
458
+ path: OWNERSHIP_PATH,
459
+ pointer: '/owners/-',
460
+ description: `Add ownership entry for ${vertical.id}`,
461
+ value: ownershipEntry(scope, vertical)
462
+ },
463
+ {
464
+ path: DEVELOPMENT_OVERLAY_PATH,
465
+ pointer: `/ports/${vertical.id}`,
466
+ description: `Reserve development port ${vertical.port}`,
467
+ value: vertical.port
468
+ },
469
+ {
470
+ path: DEVELOPMENT_OVERLAY_PATH,
471
+ pointer: `/manifests/${vertical.id}`,
472
+ description: `Add local Module Federation manifest URL for ${vertical.id}`,
473
+ value: manifestUrl
474
+ },
475
+ ...effectApiMutation,
476
+ {
477
+ path: 'package.json',
478
+ pointer: "/scripts",
479
+ description: "Regenerate workspace scripts for the new vertical set"
480
+ },
481
+ {
482
+ path: `${external_descriptors_cjs_namespaceObject.shellApp.directory}/package.json`,
483
+ pointer: '/dependencies',
484
+ description: `Wire shell dependencies for ${vertical.id}`
485
+ },
486
+ {
487
+ path: external_descriptors_cjs_namespaceObject.GENERATED_CONTRACT_PATH,
488
+ pointer: '/apps',
489
+ description: `Regenerate contract with ${vertical.id}`
490
+ }
491
+ ];
492
+ }
493
+ function createShellDependencyChanges(scope, vertical) {
494
+ return [
495
+ {
496
+ path: `${external_descriptors_cjs_namespaceObject.shellApp.directory}/package.json`,
497
+ section: 'zephyr:dependencies',
498
+ packageName: (0, external_descriptors_cjs_namespaceObject.remoteDependencyAlias)(vertical),
499
+ version: (0, external_descriptors_cjs_namespaceObject.zephyrRemoteDependency)(scope, vertical)
500
+ },
501
+ ...(0, external_descriptors_cjs_namespaceObject.appHasEffectApi)(vertical) ? [
502
+ {
503
+ path: `${external_descriptors_cjs_namespaceObject.shellApp.directory}/package.json`,
504
+ section: 'dependencies',
505
+ packageName: (0, external_naming_cjs_namespaceObject.packageName)(scope, vertical.packageSuffix),
506
+ version: external_ultramodern_package_source_cjs_namespaceObject.WORKSPACE_PACKAGE_VERSION
507
+ }
508
+ ] : []
509
+ ];
510
+ }
511
+ function addUltramodernVertical(options) {
512
+ const beforeFiles = (0, external_generation_result_cjs_namespaceObject.createFileSnapshot)(options.workspaceRoot);
513
+ const { scope, topologyPath, ownershipPath, overlayPath, topology, ownership, overlay, packageSource, enableTailwind, vertical, updatedVerticals } = prepareAddUltramodernVertical(options);
514
+ (0, external_write_workspace_cjs_namespaceObject.writeApp)(options.workspaceRoot, scope, vertical, packageSource, enableTailwind);
515
+ topology.shell ??= {};
516
+ topology.shell.verticalRefs ??= [];
517
+ topology.shell.verticalRefs.push(vertical.id);
518
+ topology.shell.moduleFederation ??= {};
519
+ topology.shell.moduleFederation.remotes ??= [];
520
+ topology.shell.moduleFederation.remotes.push({
521
+ id: vertical.id,
522
+ name: vertical.mfName,
523
+ manifestUrl: `http://localhost:${vertical.port}/mf-manifest.json`
524
+ });
525
+ topology.verticals ??= [];
526
+ topology.verticals.push(verticalTopologyEntry(scope, vertical));
527
+ ownership.owners ??= [];
528
+ ownership.owners.push(ownershipEntry(scope, vertical));
529
+ overlay.ports[vertical.id] = vertical.port;
530
+ overlay.manifests ??= {};
531
+ overlay.manifests[vertical.id] = `http://localhost:${vertical.port}/mf-manifest.json`;
532
+ overlay.apis ??= {};
533
+ overlay.apis[vertical.id] = `http://localhost:${vertical.port}${(0, external_descriptors_cjs_namespaceObject.effectApiPrefix)(vertical)}`;
534
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(topologyPath, topology);
535
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(ownershipPath, ownership);
536
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(overlayPath, overlay);
537
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(external_node_path_default().join(options.workspaceRoot, external_descriptors_cjs_namespaceObject.GENERATED_CONTRACT_PATH), (0, external_contracts_cjs_namespaceObject.createGeneratedContract)(scope, [
538
+ {
539
+ ...external_descriptors_cjs_namespaceObject.shellApp,
540
+ verticalRefs: updatedVerticals.map((vertical)=>vertical.id)
541
+ },
542
+ ...updatedVerticals
543
+ ], enableTailwind));
544
+ rewriteShellAppFiles(options.workspaceRoot, scope, packageSource, enableTailwind, updatedVerticals);
545
+ (0, external_workspace_scripts_cjs_namespaceObject.writeGeneratedWorkspaceScripts)(options.workspaceRoot, scope, enableTailwind, updatedVerticals);
546
+ addShellZephyrDependency(options.workspaceRoot, scope, vertical);
547
+ addShellWorkspaceDependency(options.workspaceRoot, scope, vertical);
548
+ updateRootWorkspaceScripts(options.workspaceRoot, scope, packageSource, updatedVerticals);
549
+ const afterFiles = (0, external_generation_result_cjs_namespaceObject.createFileSnapshot)(options.workspaceRoot);
550
+ const { createdPaths, rewrittenPaths } = (0, external_generation_result_cjs_namespaceObject.diffFileSnapshots)(beforeFiles, afterFiles);
551
+ const result = (0, external_generation_result_cjs_namespaceObject.createGenerationResult)({
552
+ operation: 'vertical',
553
+ workspaceRoot: options.workspaceRoot,
554
+ packageScope: scope,
555
+ packageSource,
556
+ createdApps: [
557
+ vertical
558
+ ],
559
+ createdPaths,
560
+ rewrittenPaths
561
+ });
562
+ (0, external_overlays_cjs_namespaceObject.runCodeSmithOverlays)({
563
+ workspaceRoot: options.workspaceRoot,
564
+ overlays: options.overlays,
565
+ result
566
+ });
567
+ return result;
568
+ }
569
+ exports.addShellWorkspaceDependency = __webpack_exports__.addShellWorkspaceDependency;
570
+ exports.addShellZephyrDependency = __webpack_exports__.addShellZephyrDependency;
571
+ exports.addUltramodernVertical = __webpack_exports__.addUltramodernVertical;
572
+ exports.assertCanCreate = __webpack_exports__.assertCanCreate;
573
+ exports.assertValidVerticalName = __webpack_exports__.assertValidVerticalName;
574
+ exports.existingPackageSource = __webpack_exports__.existingPackageSource;
575
+ exports.existingTailwindEnabled = __webpack_exports__.existingTailwindEnabled;
576
+ exports.nextAvailablePort = __webpack_exports__.nextAvailablePort;
577
+ exports.ownershipEntry = __webpack_exports__.ownershipEntry;
578
+ exports.planUltramodernVertical = __webpack_exports__.planUltramodernVertical;
579
+ exports.prepareAddUltramodernVertical = __webpack_exports__.prepareAddUltramodernVertical;
580
+ exports.rewriteShellAppFiles = __webpack_exports__.rewriteShellAppFiles;
581
+ exports.updateRootWorkspaceScripts = __webpack_exports__.updateRootWorkspaceScripts;
582
+ exports.verticalTopologyEntry = __webpack_exports__.verticalTopologyEntry;
583
+ exports.verticalsFromTopology = __webpack_exports__.verticalsFromTopology;
584
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
585
+ "addShellWorkspaceDependency",
586
+ "addShellZephyrDependency",
587
+ "addUltramodernVertical",
588
+ "assertCanCreate",
589
+ "assertValidVerticalName",
590
+ "existingPackageSource",
591
+ "existingTailwindEnabled",
592
+ "nextAvailablePort",
593
+ "ownershipEntry",
594
+ "planUltramodernVertical",
595
+ "prepareAddUltramodernVertical",
596
+ "rewriteShellAppFiles",
597
+ "updateRootWorkspaceScripts",
598
+ "verticalTopologyEntry",
599
+ "verticalsFromTopology"
600
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
601
+ Object.defineProperty(exports, '__esModule', {
602
+ value: true
603
+ });